前端入参或者其他系统调用接口 参数缺失统一处理

//@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这两个类为我们公司封装的代码,具体的返回对象可自己定义

定义了上述的自定义异常处理类后,返回的结果变成了下面这样:

就这样完美解决啦!

参考博客链接

经验分享 程序员 微信小程序 职场和发展