swagger 参数分组校验

swagger + knife4j 结合展示接口文档,
新增和修改接口使用一个dto,

@NotNull(message = "ID不能为空", groups = Group.Update.class)
 private Long id;

但是 文档中显示,两个接口参数 id 都是必传的。
swagger是否支持 添加接口 显示 id不必传,修改接口id必传呢?

“Devil组”引证GPT后的撰写:

  • Swagger和Knife4j是基于接口文档自动生成和展示的工具,它们并不会对接口参数的校验逻辑进行修改。
  • 如果想在Swagger文档中区分新增和修改接口的DTO参数要求,您可以考虑在DTO类中使用分组校验来实现。具体来说,可以定义两个分组,一个用于新增接口参数校验,另一个用于修改接口参数校验,然后在分组中分别定义id参数是否必传的校验规则。

举个例子,可以这样修改DTO类的注解

public class YourDTO {

  public interface Add {}
  
  public interface Update {}
  
  @NotNull(message = "ID不能为空", groups = Group.Update.class)
  private Long id;

  // ... 其他参数 ...

}


在新增接口中,可以使用@Validated(YourDTO.Add.class)注解来指定使用Add分组进行参数校验:

@PostMapping("/add")
public Result add(@Validated(YourDTO.Add.class) @RequestBody YourDTO dto) {
  // ... 
}


而在修改接口中,则使用@Validated(YourDTO.Update.class)注解来指定使用Update分组进行参数校验:

@PostMapping("/update")
public Result update(@Validated(YourDTO.Update.class) @RequestBody YourDTO dto) {
  // ... 
}


这样,Swagger生成的接口文档中,针对不同的接口,会显示不同的参数要求。