Spring Boot使用@ControllerAdvice注解处理全局异常

Spring BootJava大约 1307 字

指定异常

可根据异常类型返回对应信息。如使用了@Valid注解进行请求字段的验证,可判断异常是否是MethodArgumentNotValidException来返回对应的信息。

也可自定义异常,只需根据相应类型判断返回对应错误信息即可。

代码示例

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result handleException(Exception e) {
        log.error("GlobalExceptionHandler#{}", e.getMessage());
        Result result = new Result();
        result.setCode(-1);
        if (e instanceof MethodArgumentNotValidException) {
            BindingResult bindingResult = ((MethodArgumentNotValidException) e).getBindingResult();
            String defaultMessage = "参数校验未通过";
            if (bindingResult.hasErrors()) {
                defaultMessage = ":" + bindingResult.getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));
            }
            result.setMsg(defaultMessage);
        } else if (e instanceof MissingServletRequestParameterException) {
            result.setMsg("请求参数不完整");
        }else if (e instanceof TypeMismatchException) {
            result.setMsg("请求参数类型不匹配");
        } else if (e instanceof HttpMessageNotReadableException) {
            result.setMsg("缺少请求体参数");
        } else {
            result.setMsg("请求失败");
        }
        return result;
    }

}
阅读 294 · 发布于 2020-04-02

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批