我正在使用 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 但它不起作用。
有人可以帮忙吗?我希望我能够解释这个问题。
回答我自己的问题:
public List getCategory( @Valid CategoryInputRequest inputRequest) 可以工作,但正确的声明应该有关键@ModelAttribute。这表明映射是从 url 中的查询参数而不是请求正文完成的。并且 swagger 能够正确分析模式。希望它对某人有帮助:)
在 DTO 上使用 @org.springdoc.api.annotations.ParameterObject