java @NotNull等实体属性校验总结

1.常用注解:

@NotEmpty 用在集合类上面
@NotBlank 用在String上面
@NotNull    用在基本类型上

2.使用方法

1.使用全局异常类捕获 MethodArgumentNotValidException.class 在方法中不要写BindingResult参数,否则异常不会抛出,无法捕获校验信息

	@ResponseBody
	@ExceptionHandler(MethodArgumentNotValidException.class)
	public Object handleValidException(MethodArgumentNotValidException e) {
		BaseResult baseResult = new BaseResult();
		baseResult.setReturnCode("400");
		baseResult.setReturnMsg(e.getBindingResult().getFieldError().getDefaultMessage());
		//将错误信息返回给前台
		return baseResult;
	}

2.在方法中传入BindingResult参数,将异常封装在参数中,通过切面方法获取此参数取出校验信息

@Aspect
@Component
public class ParamValidAspect {

    @Pointcut("execution(public * com.soc.cloud..controller.*.*(..))")
    public void pointCut() {
    }

    @Before(value = "pointCut()")
    public void paramValid(JoinPoint joinPoint) {
        BindingResult bindingResult = null;
        //遍历被通知方法(controller方法)的参数列表
        for (Object arg : joinPoint.getArgs()) {
            //参数校验结果会存放在BindingResult中
            if (arg instanceof BindingResult) {
                bindingResult = (BindingResult) arg;
                String message = validRequestParams(bindingResult);
                if (message.length() > 0) {
                    throw new BaseException("400", message);
                }
                break;
            }
        }
    }

    /**
     * 校验
     */
    private String validRequestParams(BindingResult result) {
        StringBuilder sb = new StringBuilder();
        if (result.hasErrors()) {
            List<ObjectError> allErrors = result.getAllErrors();
            for (ObjectError objectError : allErrors) {
                sb.append(objectError.getDefaultMessage()).append(";");
            }
        }
        return sb.toString();
    }

}

	/**
	 * 测试
	 */
	@RequestMapping(value = "/testNotNull", method={RequestMethod.POST})
	@ResponseBody
	public BaseResult testNotNull(@RequestBody @Valid LombokTest lombokTest, BindingResult result) {
		System.out.println(lombokTest);
		return BaseResult.success();
	}

	@Data
	static class LombokTest{
		@NotNull(message = "a不能为空")
		private String a;
		@NotNull(message = "b不能为空")
		private String b;
	}

补充:lombok中的@NonNull注解为编译时注解,javax中的@NotNull为运行时注解(推荐使用) 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值