强制Swagger公开请求对象

时间:2016-11-15 06:52:00

标签: spring rest spring-boot swagger spring-restcontroller

我正在使用Spring启动创建Rest服务,而我正在使用Swagger(通过SpringFox)创建文档。它几乎正常工作。当我将所有查询参数移动到请求对象并在方法签名中使用它因此隐式绑定值并隐式触发弹簧验证器时,会出现问题。

这是我的方法签名的外观:

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假设&#34; CategoryInputRequest inputRequest&#34;在方法签名中是requestBody类型的参数而不是查询pameters,因此不会将各个字段暴露给用户。而是提供一个大文本区域来放置JSON块。我尝试给@APIModelProperty,但它不起作用。

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

1 个答案:

答案 0 :(得分:1)

回答我自己的问题:

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