微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Spring自定义解析器注释的Swagger OpenApi动态查询参数名称

如何解决使用Spring自定义解析器注释的Swagger OpenApi动态查询参数名称

我试图弄清楚如何向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上指出这一点?

解决方法

似乎您不是在这里使用spring注释,而是您自己的@FlightRequestParams。

如果您确实希望动态添加默认值,则可以为注释DelegatingMethodParameterCustomizer编写自己的注释,就像为@PageableDefault所做的那样。 然后将其声明为spring Bean,命名为follow

或者最简单的方法是使用@Parameter批注声明参数值。您可以看到一个PageableAsQueryParam的示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。