强制 Swagger 公开请求对象的详细信息

问题描述 投票:0回答:2

我正在使用 Spring boot 创建一个 Rest 服务,对于文档,我使用 Swagger(通过 SpringFox)。而且它几乎工作正常。当我将所有查询参数移至请求对象并在方法签名中使用该参数时,就会出现问题,从而隐式绑定值并隐式触发 Spring 验证器。

这就是我的方法签名的样子:

public List<Category> getCategory( @Valid CategoryInputRequest inputRequest) throws JsonParseException,
  JsonMappingException, IOException

CategoryInputRequest 是一个具有普通 bean 结构的 bean:

@ApiModel(value = "Input Description")
public class CategoryInputRequest  {
   @NotNull(message="SE Number is mandatory")
   @Size(min=10,max=10,message="SE Number must have 10 characters")
   @ApiModelProperty
   private String idNumber;

   @NotNull(message="Platform ID is mandatory")
   @ApiModelProperty
   private String platformId;
   .
   .
   .

其中 IdNumber、platformId 是查询参数,数据验证和绑定完美地进行。但 Swagger 假定方法签名中的“CategoryInputRequest inputRequest”是 requestBody 类型的参数,而不是查询参数,因此不会向用户公开各个字段。相反,提供了一个大文本区域来放入 JSON 块。我尝试提供 @APIModelProperty 但它不起作用。

有人可以帮忙吗?我希望我能够解释这个问题。

spring rest spring-boot swagger spring-restcontroller
2个回答
2
投票

回答我自己的问题:

public List getCategory( @Valid CategoryInputRequest inputRequest) 可以工作,但正确的声明应该有关键@ModelAttribute。这表明映射是从 url 中的查询参数而不是请求正文完成的。并且 swagger 能够正确分析模式。希望它对某人有帮助:)


0
投票

在 DTO 上使用 @org.springdoc.api.annotations.ParameterObject

© www.soinside.com 2019 - 2024. All rights reserved.