使用Spring自定义解析器注释的Swagger OpenApi动态查询参数名称
我试图弄清楚如何向使用Spring自定义解析器注释的Swagger OpenApi动态查询参数名称,swagger,openapi,springdoc,springdoc-openapi-ui,Swagger,Openapi,Springdoc,Springdoc Openapi Ui,我试图弄清楚如何向SpringDocOpenApi表明正在使用HandlerMethodArgumentResolver生成自定义对象,它截获一些传入的请求参数并从中创建一个对象。这个概念实际上与Spring使用@Pageable时的概念一样 以下是我的自定义对象的某些部分: class FlightRequestHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { FlightRequestHandle
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
的控制器:
@RequestMapping(value = "/flights", method = RequestMethod.GET)
Flights flights(FlightRequest flightRequest, HttpServletResponse response) {
return flightSearchService.retrieveFlights(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);
}
使用带有自定义查询参数名称的FlightRequest
的控制器:
@RequestMapping(value = "/flights", method = RequestMethod.GET)
Flights flights(FlightRequest flightRequest, HttpServletResponse response) {
return flightSearchService.retrieveFlights(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
表明这一点?这里您似乎没有使用Spring注释,而是使用您自己的:@FlightRequestParams
如果您确实希望动态添加默认值,那么您可以为注释编写自己的注释,就像为@PageableDefault
编写注释一样。
然后将其声明为Springbean,如下所示
或者最简单的方法是使用
@parameter
注释声明参数值。你可以看到一个例子。这个问题已经有一段时间了。请把它贴在邮箱里。如果问题已经存在,请在问题的评论中说明。