前端入参或者其他系统调用接口 参数缺失统一处理
//@NotNull 验证对象是否不为null, 无法查检长度为0的字符串 //@NotBlank 检查约束 (字符串) 是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. //@NotEmpty 检查(集合)约束元素是否为NULL或者是EMPTY. @NotBlank(message = "物流公司不能为空") private String fromBillLogistics;
入参加了上述的注解 来校验字段的非空。但是返回给前端或者其他系统的结果提示不太友好。
通过测试,查看日志及返回值,发现参数缺失时,会抛出异常:
org.springframework.web.bind.MethodArgumentNotValidException
所以,我们要对一些异常进行统一处理,首先在我们自定义的异常类加上@ControllerAdvice注解,然后编写具体的异常处理,在方法上加上@ExceptionHandler(value = MethodArgumentNotValidException.class)注解,这样该异常就会被这个方法捕获,并且执行方法内的代码进行统一异常处理。
@ExceptionHandler(value = MethodArgumentNotValidException.class)
@ResponseBody
public ServerResponse methodArgNotValid(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
Objects.requireNonNull(bindingResult.getFieldError());
return ServerResponse.fail(ResponseCode.PARAMETER_ERROR.getCode(), bindingResult.getFieldError().getField()
+ " " + bindingResult.getFieldError().getDefaultMessage());
}
注:ResponseCode以及ServerResponse这两个类为我们公司封装的代码,具体的返回对象可自己定义
定义了上述的自定义异常处理类后,返回的结果变成了下面这样:
就这样完美解决啦!
参考博客链接
