一、常用注解
常用注解 | 说明 | 判断和示例 |
---|---|---|
@NotNull | 被注解元素不能为null | if(obj != null) |
@NotEmpty | 被注解元素不能为null且长度不能为0 | 字符串:if(s != null && s.length() > 0) 集合:if(obj != null && obj.size() > 0) |
@NotBlank | 只能用于String类型,被注解元素不能为null且必须有非空格外的其它字符 | if(s != null && s.trim().length() > 0) |
@Length(min=low, max=high) | 只能用于String类型,其长度min <= len <= max。按理说都有length了,肯定不能为null,但是测试不行,故必须与@NotNull等非空注解配合使用 | if(s != null && s.length() >= min && s.length <= high) |
@Size(min=low, max=high) | 用于集合类型,其大小min <= size <= max。也必须配合非空注解使用 | if(obj != null && obj.length() >= min && obj.length <= high) |
@Max(max)@Min(min) | 都只能用于Number类型或字符类型。@Max表示被注解元素的值不能超过设置的最大值max;@Min表示被注解的值不能小于min。也必须配合@NotNull注解使用 | 如设置vlanID,最大为4096 |
只用于String类型。需配合非空注解使用 | 默认的格式:a@b | |
@Pattern(regexp=正则表达式) | 用于String类型,regexp设置正则,需配合非空注解使用 | 如校验IP |
二、全局异常
0. 依赖管理
需引入依赖包hibernate-validator
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
1. BindException / MethodArgumentNotValidException
Controller中进行参数校验时抛出该异常。其中,不涉及组操作时,默认抛出BindException异常;涉及组操作时默认抛出MethodArgumentNotValidException异常,差别不大,新版本中MethodArgumentNotValidException继承于BindException,两个异常可以共用一个处理方法
2. ConstraintViolationException
Service中进行参数校验时抛出此异常,通过其getMessage()方法就可获取所有异常message
3. 代码实现
@RestControllerAdvice/@ControllerAdvice:全局异常处理注解,拦截所有异常统一处理。也是 @Component注解,两者的区别同@RestController/@Controller一样。
@ExceptionHandler:拦截指定异常并进行处理,同一个异常处理不能出现两次
@ResponseStatus:设置response的状态码,默认200 OK
@RestControllerAdvice
public class GlobalException {
@ExceptionHandler(ConstraintViolationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResultBack handleConstraintViolationException(ConstraintViolationException ex) {
BasicLogUtil.info("ConstraintViolationException");
return new ResultBack(ResultStatus.FAILED, ex.getMessage());
}
// BindException 和 MethodArgumentNotValidException 共用一个异常处理方法
@ExceptionHandler({
BindException.class, MethodArgumentNotValidException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)