基类里的属性
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中的统一异常处理方式