迷糊小妹 2023-03-07 17:45 采纳率: 50%
浏览 28

swagger 参数分组校验

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

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

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

  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-03-07 18:07
    关注

    “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生成的接口文档中,针对不同的接口,会显示不同的参数要求。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月7日

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分 合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备