当前位置: 首页 > 知识库问答 >
问题:

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

金霄
2023-03-14

我试图找出如何指示到SpringDocOpenApi一个自定义对象正在生成使用HandlerMultiodArgumentResolver拦截一些传入的请求参数并从中创建一个对象。这个概念实际上与Spring使用@Pagable所做的相同。

以下是我的自定义对象的某些部分:

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)
}

FlightRequestclass:

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);
}

正如您在上面的示例中看到的,每个endpoint都可以覆盖默认的查询参数名称
我如何向Spring Doc表明这一点?

共有1个答案

濮阳靖
2023-03-14

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

如果您真的希望动态添加默认值,那么您可以为您的注释编写自己的注释委托方法参数自定义程序,就像为@PageableDefault编写一样。然后宣布它为春豆,如下所示。

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

 类似资料:
  • 我正在尝试使用Spring安全注释,如@PreAuthorize和@安全,但我希望评估用户不是在一个角色上,而是他们是否拥有对特定实体的权限,在这种情况下是一家公司。在我的控制器中,我收到一个超文本传输协议请求,其中包含一个firmId作为参数,我想确保这个用户被允许进入这家公司。是否可以使用当前的Spring安全注释?。我正在寻找一个优雅的解决方案,我一直在寻找自定义约束验证器作为jsr303规

  • 我正在尝试将自定义查询添加到Spring Data JDBC CrudRepository,以允许通过备用自然键查找实体。实体有一个 ID,在本例中为 Long,以及一个自然键,即 Reference 类型(基础类型为 UUID)。 我已经创建并注册了从引用到UUID的自定义转换器,反之亦然,并且希望在通过引用查找实体时使用它们。转换在从数据库中提取和存储实体时起作用(Postgres 12.2)

  • 我发现了几个与此相关的(不是重复的)问题,但它们不能让我满意。 我无法理解在哪里以及为什么要使用? 我在一本书中读到了一个自定义注释的示例,但没有详细解释。 myMeth()内的输出与预期一致。 关于这个例子,我有几个问题。 1-如何在此程序中使用和?或

  • 我创建了一个新的注释来验证控制器上的参数: 这是我的验证器: 这是我的控制器: 我的控制器注释为: 我还有一个建议控制器,我打算用它来捕捉抛出的异常: 我在控制台上得到的是: pom.xml中的依赖关系: 谁能告诉我我错过了什么?