3

SpringDoc OpenApiカスタムオブジェクトが生成されていることを示す方法を見つけようとしてHandlerMethodArgumentResolverいます。これは、受信リクエストパラメーターをインターセプトし、そこからオブジェクトを作成します。この概念は実際には、Spring が で行うのとまったく同じ@Pageableです。

これが私のカスタムオブジェクトの一部です:

class FlightRequestHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
FlightRequestHandlerMethodArgumentResolver() {
}

@Override
boolean supportsParameter(final MethodParameter parameter) {
    return FlightRequest.class.equals(parameter.getParameterType());
}

@Override
Object resolveArgument(
        final MethodParameter parameter,
        final ModelAndViewContainer mavContainer,
        final NativeWebRequest webRequest, final WebDataBinderFactory binderFactory) throws Exception {
    final Map<String, String[]> parameterMap = webRequest.getParameterMap()
    // query param names are configurable
    // implementation about finding query param names is ommited
    return new FlightRequest(parameterMap)
}

FlightRequestクラス:

public class FlightRequest {

@Parameter(name = "startDate")
private final LocalDate startDate;

@Parameter(name = "endDate")
private final LocalDate endDate;

FlightRequest (LocalDate startDate, LocalDate endDate) {
    this.submissionStartDate = submissionStartDate;
    this.submissionEndDate = submissionEndDate;
}

FlightRequestデフォルトのクエリ パラメータ名を使用するコントローラ:

@RequestMapping(value = "/flights", method = RequestMethod.GET)
Flights flights(FlightRequest flightRequest, HttpServletResponse response) {
    return flightSearchService.retrieveFlights(flightRequest);
}

FlightRequestカスタム クエリ パラメータ名を使用するコントローラ:

@RequestMapping(value = "/current-flights", method = RequestMethod.GET)
Flights flights(@FlightRequestParams(fromDateParamName="current-flights-from", toDateParamName="current-flights-till) FlightRequest flightRequest, HttpServletResponse response) {
    return flightSearchService.retrieveFlights(flightRequest);
}

上記の例に見られるように、各エンドポイントはデフォルトのクエリ パラメータ名をオーバーライドできます。
これを にどのように示すことができSpring Docますか?

4

1 に答える 1

0

ここでは春の注釈を使用していないようですが、独自の @FlightRequestParams.

デフォルト値を動的に追加することが本当に必要な場合は、注釈DelegatingMethodParameterCustomizerに対して独自の値を記述できます@PageableDefault。次に、次のように、Spring Bean として宣言します

@Parameterまたは、最も簡単な方法は、注釈を使用してパラメーター値を宣言することです。PageableAsQueryParamの例を見ることができます。

于 2020-12-02T11:12:40.190 に答える