Swagger接口注解及表单校验、分组校验

标签: swagger 接口 注解 | 发表时间:2019-11-10 16:45 | 作者:PXY
出处:https://www.iteye.com
先讲解以下几个关键点

表单校验的关键在于注解:@Validated

分组校验的关键在于 @Validated({UpdateGroup.User.class}) 校验规则有定义UpdateGroup.User.class 就会启用该校验规则

UpdateGroup 可以自行定义

表单校验信息捕获当然就是handleMethodArgumentNotValidException 中的代码来处理了 这里可以根据实际情况就行修改

Swagger的两个关键注解 @Api @ApiOperation



废话不多说 直接上代码

//表单校验 抛出异常信息
@RestControllerAdvice
public class RRExceptionHandler {

   /**
    * 自定义注解异常拦截
    * @param e
    * @param request
    * @return
    */
   @ExceptionHandler({BindException.class, ConstraintViolationException.class, MethodArgumentNotValidException.class})
   public R handleMethodArgumentNotValidException(Exception e, HttpServletRequest request) {

      // 错误信息
      StringBuilder sb = new StringBuilder("参数校验失败:");

      String msg = "";
      if (!(e instanceof BindException) && !(e instanceof MethodArgumentNotValidException)) {
         for (ConstraintViolation cv: ((ConstraintViolationException)e).getConstraintViolations()) {
            msg = cv.getMessage();
            sb.append(msg).append(";");

            Iterator<Path.Node> it = cv.getPropertyPath().iterator();
            Path.Node last = null;
            while (it.hasNext()) {
               last = (Path.Node)it.next();
            }
         }
      } else {
         List<ObjectError> allErrors = null;
         if (e instanceof BindException) {
            allErrors = ((BindException)e).getAllErrors();
         } else {
            allErrors = ((MethodArgumentNotValidException)e).getBindingResult().getAllErrors();
         }
         // 拼接错误信息
         for (ObjectError oe : allErrors) {
            msg = oe.getDefaultMessage();
            sb.append(msg).append(";");
         }
      }
      return R.error(sb.toString());
   }
}

//controller 校验示例
@RestController
@RequestMapping("/user")
@Api(tags = "用户管理")
public class SysUserController {

/**
* 保存用户
*/
@PostMapping("/save")
@ApiOperation("添加用户")
public R save(@RequestBody @Valid AddUserForm form){
    //业务逻辑处理
     return R.ok();
}

/**
* 修改用户
*/
@PostMapping("/update")
@ApiOperation("修改用户")
public R update(@RequestBody @Validated({UpdateGroup.User.class}) UpdateUserForm form){
//业务逻辑处理
   return R.ok();
}

}

//from表单

//新增表单
@Data
@ApiModel
public class AddUserForm {


   
     * 用户名
     */
    @NotBlank(message="用户名不能为空")
    @ApiModelProperty(value = "用户名",required = true, groups = UpdateGroup.User.class
)
    private String username;


    /**
     * 邮箱
     */
     @Email(message="邮箱格式不正确")
@ApiModelProperty(value = "邮箱",required = true)
    private String email;

    /**
     * 手机号
     */
    @NotBlank(message="手机号不能为空")
    @ApiModelProperty(value = "手机号",required = true)
    private String phone;
   

    /**
     * 部门ID
     */
    @NotNull(message="部门不能为空")
    @ApiModelProperty(value = "部门ID",required = true)
    private Long deptId;

}

//更新表单
@Data
@ApiModel
public class UpdateUserForm {
    /**
     * 用户名
     */
    @NotBlank(message="用户名不能为空")
    @ApiModelProperty(value = "用户名",required = true)
    private String username;

   
    
    /**
     * 邮箱
     */
     @Email(message="邮箱格式不正确")
    @ApiModelProperty(value = "邮箱",required = true)
    private String email;

    /**
     * 手机号
     */
    @NotBlank(message="手机号不能为空")
    @ApiModelProperty(value = "手机号",required = true)
    private String phone;

     /**
     * 部门ID
     */
    @NotNull(message="部门不能为空")
    @ApiModelProperty(value = "部门ID",required = true)
    private Long deptId;

}



/**
* 更新数据 Group
* 分组校验
*
*/
public interface UpdateGroup {

    public interface User {
    }
}





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [swagger 接口 注解] 推荐:

Swagger接口注解及表单校验、分组校验

- - 研发管理 - ITeye博客
表单校验的关键在于注解:@Validated. 分组校验的关键在于 @Validated({UpdateGroup.User.class}) 校验规则有定义UpdateGroup.User.class 就会启用该校验规则. UpdateGroup 可以自行定义. 表单校验信息捕获当然就是handleMethodArgumentNotValidException 中的代码来处理了 这里可以根据实际情况就行修改.

iOS 免费接口

- - ITeye博客
京东获取单个商品价格接口:. http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1. ps:商品ID这么获取:http://item.jd.com/954086.html. http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号.

雷电接口(Thunderbolt)问答

- Richard - Apple4.us
这次的 MacBook Pro 更新带来了一种新的接口 Thunderbolt(雷电),不但速度比火线 800 和 eSATA 都快得多,更可同时担当数据、视频、音频传输之重任. 这里是 Dan Frakes 和 Dan Moren 为 Macworld.com 写的雷电基础指南,译出供大家参考. 雷电(旧称「光峰」Light Peak)是 Intel 与苹果合作研发的一种新的外设接口技术,它能把数据、视频、音频和电力的传输集合到一个单独的接口上.

移动平均 - IGod接口

- - 博客园_1 + 1 = The World
示例——移动平均在股票分析. 最近大 BOSS“迷上”了一个网络游戏(什么游戏就不多说啦~),让我写个程序帮他算一下(现在他让另一个同事写了,我要改 bug 没时间,所以,我主要是没事时“凑热闹”提点想法). 期间,发现这个游戏一定是基于某个数学模型,试了很多方法,比如,文本相似度,曲线相似度等等,都不能很好的预测,最后,采用移动平均以及变体,就靠谱多了~本文主要回忆一下移动平均相关的问题.

Android异步接口测试

- - 百度质量部 | 软件测试 | 测试技术 | 百度测试
    基于Android的C/S移动应用中访问后端数据的场景是非常多的,异步接口测试主要是在单元测试完成的基础上检查接口级访问是否正确,主要保证对外请求的组装与发送是否符合后端的约定. 现在项目的异步接口访问都遵循一个特定的访问模式:前台的Activity获取到触发事件后将接受到的参数传给一个异步任务,这些任务大都是AsyncTask的实现——即启动一个新的线程访问后台接口数据,完毕后调用回调函数更新UI展示,示意图如下:.

各个IP API接口

- - 谁主沉浮
腾讯的IP地址API接口地址: http://fw.qq.com/ipaddress. 返回的是数据格式为:var IPData = new Array(“114.218.183.139″,””,”江苏省”,”苏州市”);. .

Spring中Aware相关接口

- - 企业架构 - ITeye博客
加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的. 方法,获得ApplicationContext对象. 前提必须在Spring配置文件中指定该类.

Sina股票数据接口

- - 互联网 - ITeye博客
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据. 接口:http://hq.sinajs.cn/list=sh601006这个url会返回一串文本,例如:. var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,.

JPA & Hibernate 注解

- - CSDN博客编程语言推荐文章
必须,name为可选,对应数据库中一的个表 . 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息 . name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名 . catalog:可选,表示Catalog名称,默认为Catalog(""). .

SpringMVC 注解配置

- - CSDN博客互联网推荐文章
在Spring项目开发中呢,最好是搞明白原理,其次装上Spring为eclipse开发的插件,这样会大大提高开发效率,而且减少了大量信息的记忆负担. SpringIDE插件,可自行到eclipse插件库中进行下载,还有其他Spring相关的plugin可以自行研究下. 当装好这个插件之后呢,可以根据向导创建一个简单的SpringMVC项目,大量的基本信息都可以自动生成,当然了是建立在明白原理的基础上,熟练了之后再去使用插件.