【问题标题】:Swagger 3 and SpringMVC how to describe POJO RequestParamsSwagger 3 和 SpringMVC 如何描述 POJO RequestParams
【发布时间】:2022-08-09 04:23:05
【问题描述】:

我有一个简单的 Spring MVC 控制器

@RestController
@Validated
@RequestMapping(\"/users\")
public class UsersController {

  @GetMapping
  public String getAllUsers(@Valid Filter filter) throws MyCustomServiceException {
   [...]
  }
}

由于这个端点有大约 20 个 RequestParam 而不是让控制器膨胀所有字段,我把它们都很好地放在了 POJO 中(实际上可以在需要类似查询参数过滤器的其他控制器中重用)

public class UserFilter extends GenericRequestParams {
  [...] 
  private String email;
  [...] 
}

现在的问题是 Swagger 不认为 UserFilter 及其字段是查询参数,而是一个简单的对象,因此在 Swagger UI 上它变得无用,因为很难测试该端点。

有没有办法指示 UserFilter 字段需要被视为查询参数?

  • 你好,这个问题你解决了吗
  • 是的,在您的对象之前的控制器中使用@ParameterObject

标签: spring-mvc swagger-ui pojo swagger-3.0 queryparam


【解决方案1】:

您可以在使用@ModelAttribute 注释的模型类中使用@ApiParam 注释,以便swagger 将此字段生成到UI 中。

public class UserFilter {
    @ApiParam(value = "the user email", required = true)
    private String email;
}

【讨论】:

  • Swagger 3 没有 ApiParam(它的等价物是`@Parameter)但不幸的是我尝试在控制器中使用“@ModelAttribute”但 Swagger 仍然没有将这些视为查询参数
【解决方案2】:

魔术注释是@ParameterObject

@GetMapping
  public String getAllUsers(@Valid @ParameterObject Filter filter) throws MyCustomServiceException {
   [...]
  }

【讨论】:

    猜你喜欢
    • 2022-10-25
    • 1970-01-01
    • 2015-08-08
    • 2017-02-16
    • 2020-11-08
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多