`

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

阅读更多
先讲解以下几个关键点

表单校验的关键在于注解:@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 {
    }
}



分享到:
评论

相关推荐

    基于Springboot+Mybatis+ SpringMvc+springsecrity+Redis完整网站后台管理系统

    接口swagger文档 日志查询 邮件管理:发送邮件、搜索邮件 文件管理:上传文件、文件列表、文件删除 公告管理:公告未读提醒、发布公告、查询公告、公告阅读人列表 excel下载:自定义sql导出excel、也可在页面...

    lamp-cloud微服务脚手架

    基于Mybatis-plus-generator自定义了一套代码生成器, 通过配置数据库字段的注释,自动生成枚举类、数据字典注解、SaveDTO、UpdateDTO、表单验证规则注解、Swagger注解等。 16、定时任务调度器: 基于xxl-jobs进行了...

    SpringBoot-demo

    4. **@Valid注解进行表单验证**:在SpringBoot中,可以使用JSR-303/JSR-349提供的Bean Validation进行数据验证,@Valid注解配合BindingResult对象可以实现前端表单提交的数据验证,确保数据的准确性和完整性。...

    springmvc4_springmvc_mainlyyb8_

    同时,使用 `@Valid` 注解可以实现表单验证,结合 JSR-303/JSR-349 提供的校验注解,如 `@NotNull`, `@Size` 等。 8. **Aspect-Oriented Programming (AOP) 支持** Spring MVC 集成了 Spring AOP,可以用于实现如...

    spring boot 实践学习案例,与其它组件整合

    - Spring Boot 模板,包括thymeleaf、freemarker、jsp、表单校验 等。 - springboot-docs - Spring Boot 文档生成工具,包括 Swagger、Spring RestDocs - springboot-bussiness - Spring Boot 业务应用,包括...

    lamp-cloud微服务脚手架-其他

    基于Mybatis-plus-generator自定义了一套代码生成器, 通过配置数据库字段的注释,自动生成枚举类、数据字典注解、SaveDTO、UpdateDTO、表单验证规则注解、Swagger注解等。 16、定时任务调度器: 基于xxl-jobs进行了...

    cursorestful-springboot

    "Cursorestful-springboot"可能采用了Swagger UI,这是一个强大的API文档工具,通过`@Api`和`@ApiOperation`等注解,开发者能自动生成交互式的API文档,便于团队协作和API的使用。 以上就是"Cursorestful-...

Global site tag (gtag.js) - Google Analytics