Spring Boot @ControllerAdvice+@ExceptionHandler处理controller异常

需求:

  1.spring boot 项目restful 风格统一放回json

  2.不在controller写try catch代码块简洁controller层

  3.对异常做统一处理,同时处理@Validated 校验器注解的异常

方法:

  @ControllerAdvice 注解定义全局异常处理类

@ControllerAdvice
public class ControllerExceptionHandler {

}

  @ExceptionHandler 注解声明异常处理方法

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseResult handlerException(Exception e){
logger.error(e.getMessage(),e);
ResponseResult responseResult = new ResponseResult(ResponseCode.ERROR,e.getMessage());
return responseResult;
}

  处理@Validated 校验器注解的异常

@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseResult handlerMethodArgumentException(MethodArgumentNotValidException e){
logger.error(e.getMessage(),e);

BindingResult bindingResult = e.getBindingResult();
String message = ValidMethodUtils.validMethod(bindingResult);
ResponseResult responseResult = new ResponseResult(ResponseCode.ERROR,message);
return responseResult;
}

完整代码如下:

package com.travelsky.travelcloud.exception;

import com.travelsky.travelcloud.utils.ResponseCode;
import com.travelsky.travelcloud.utils.ResponseResult;
import com.travelsky.travelcloud.utils.bizutils.ValidMethodUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

/**异常统一处理的类
* Created by Liyan on 2018/3/22.
*/
@ControllerAdvice
public class ControllerExceptionHandler {

private static final Logger logger = LoggerFactory.getLogger(ControllerExceptionHandler.class);

/*create by LiYan on 2018.3.25.
* 处理不可预知的异常
* */
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseResult handlerException(Exception e){
logger.error(e.getMessage(),e);
ResponseResult responseResult = new ResponseResult(ResponseCode.ERROR,e.getMessage());
return responseResult;
}

/*create by LiYan on 2018.3.30.
* 处理接口数据校验的异常
* */
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseResult handlerMethodArgumentException(MethodArgumentNotValidException e){
logger.error(e.getMessage(),e);

BindingResult bindingResult = e.getBindingResult();
String message = ValidMethodUtils.validMethod(bindingResult);
ResponseResult responseResult = new ResponseResult(ResponseCode.ERROR,message);
return responseResult;
}

}

如处理自定义异常可修改如下注解

@ExceptionHandler(自定义异常.class)

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Spring Cloud Gateway 全局通用异常处理

为什么需要全局异常处理在传统SpringBoot应用中,我们@ControllerAdvice来处理全局的异常,进行统一包装返回//摘至springcloudalibabaconsole模块处理@ControllerAdvicepublicclassConsol

03.Android崩溃Crash库之ExceptionHandler分析

目录总结00.异常处理几个常用api01.UncaughtExceptionHandler02.Java线程处理异常分析03.Android中线程处理异常分析04.为何使用setDefaultUncaughtExceptionHandler前沿上一篇整体介绍了crash崩溃

Spring异常处理

@ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度@ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开@ResponseStatus:可以将某种异常映射为HTTP状态码@ControllerAdvicepublicclassExceptio