使用@Pattern@Validated校验 并抛出异常

基类里的属性
regexp 是正则表达式
一般默认就填入正则表达式即可,但是java中字符串需要转义,这个需要注意一下。

@valid和@validated:

@Validated是@Valid 的一次封装,是Spring提供的校验机制使用。@Valid不提供分组功能

基类

    /** 标识码 */
    @Pattern(regexp = "^\\d{11}$",message = "mis只能由数字组成")
    @ApiModelProperty("标识码")
    private String mis;

控制层

在传参或者controller层中的添加@Validated注解进行调用,我这里是在控制层添加
控制层加上@Validated 然后在参数上面加@Valid

@RestController
@Validated
@RequestMapping("/simReserve")
public class SimReserveController{
   @RequestMapping("/import")
    public ActionResult save(@Valid User user){
     ........
    }
    
  //如果mis不符合正则表达式  本来回在idea的控制台抛出异常,现在我手动在控制层捕获了异常并返回异常信息 
  @ExceptionHandler(value = ConstraintViolationException.class)
    public ResponseEntity validationBodyException(ConstraintViolationException exception){
       // 捕获到Exception异常  并抛出
        return ResponseEntity.ok(exception.getMessage());
    }
}

我这里是Controller局部异常处理,@Validated引起的ConstraintViolationException 好像不能全局抛出

全局的话要注意,异常类要和启动类在同一包下
如:

@RestControllerAdvice
public class BingExceptionHandler {
    @ExceptionHandler(value = ConstraintViolationException.class)
    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    public ResponseEntity validationBodyException(ConstraintViolationException exception){
        // logger.error("捕获到Exception异常",exception);
        return ResponseEntity.ok(exception.getMessage());
    }
}

在这里插入图片描述

详情参考:Spring中的统一异常处理方式

你可能感兴趣的:(spring,spring,boot,spring,正则表达式)