【发布时间】:2021-02-14 23:03:50
【问题描述】:
我试图弄清楚如何向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 表明这一点?
【问题讨论】:
-
这个问题已经有一段时间了。请张贴在Springdoc - issues。如果问题已经公开,请务必将其放在问题的 cmets 中。
标签: swagger openapi springdoc springdoc-openapi-ui