【1】springboot自定义异常

2021-11-20  本文已影响0人  进击的小鹿

1、入参是一个对象,其中包含多个参数(先贴一个异常的返回内容)

当BindingResult中存在错误信息时,会抛出BindException异常。BindException实现了BindingResult接口(BindResult是绑定结果的通用接口, BindResult继承于Errors接口),所以该异常类拥有BindingResult所有的相关信息,因此我们可以通过捕获该异常类,对其错误结果进行分析和处理。

{
    "timestamp": "2021-11-11 20:41:55",
    "status": 400,
    "error": "Bad Request",
    "errors": [
        {
            "codes": [
                "NotNull.***.confirmFlag",
                "NotNull.confirmFlag",
                "NotNull.java.lang.Integer",
            ],
            "arguments": [
                {
                    "codes": [
                        "***.confirmFlag",
                        "confirmFlag"
                    ],
                    "arguments": null,
                    "defaultMessage": "confirmFlag",
                    "code": "confirmFlag"
                }
            ],
            "defaultMessage": "确认的参数不能为空",
            "objectName": "***",
            "field": "confirmFlag",
            "rejectedValue": null,
            "bindingFailure": false,
            "code": "NotNull"
        }
    ],
    "message": "Validation failed for object='***'. Error count: 1",
    "path": "**/**/"
}

2、捕捉异常

使用@ControllerAdvice统一处理参数校验的结果

如果 使用了@RequestBody @Valid 来封装参数并校验,这个时候这个异常处理器又不起作用了,需要再添加一个异常处理器。添加自己想要的自定义异常处理器。

返回异常的结果,可以拆解BindingResult,也可以自定义返回code。

/**
     * 处理自定义异常
     */
    @ExceptionHandler(BindException.class)
    public Result handleBindingException(BindException e) {
        log.error("BindException errMes:{}, result={}", e.getMessage(), e);
        final List<String> collect = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.toList());
        return Result.error(collect.toString());
    }

 @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        log.error(e.getMessage(), e);
        final List<String> collect = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.toList());
        return Result.error(collect.toString());
    }

上一篇 下一篇

猜你喜欢

热点阅读