Spring 全局异常拦截根据业务返回不同格式数据 自定义异常
1.全局异常拦截:针对所有异常进行拦截 可根据请求自定义返回格式
2.自定义异常类 处理不同业务的异常
接下来开始入手代码:
1).自定义异常类
@ControllerAdvice//添加注解 记得开启spring的全局扫描 public class BusinessException extends RuntimeException { private static final long serialVersionUID = 2332608236621015980L; private String code; public BusinessException(String code,String message) { super(message); this.code = code; } public BusinessException() { } public String getCode() { return code; } public void setCode(String code) { this.code = code; } }
2).全局异常处理器(对拦截到的异常进行分类处理)
/** * 全局异常处理器 * @author chenhao */ public class BusinessExceptionResolver implements HandlerExceptionResolver { /**日志log*/ private static Logger log = LoggerFactory.getLogger(BusinessExceptionResolver.class); //系统抛出的异常 @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //handler就是处理器适配器要执行的Handler对象(只有method) //解析出异常类型。 /* 使用response返回 */ response.setStatus(HttpStatus.OK.value()); //设置状态码 response.setContentType(MediaType.APPLICATION_JSON_VALUE); //设置ContentType response.setCharacterEncoding("UTF-8"); //避免乱码 response.setHeader("Cache-Control", "no-cache, must-revalidate"); //如果该 异常类型是系统 自定义的异常,直接取出异常信息。 BusinessException businessException=null; try {<br /> <strong>//根据请求方式返回不同的格式(根据自己的业务需求实现,如果只返回一种格式的不用判断)<br /> //统一返回json 自定义了返回Result类 引入了Jackson </strong>if ("application/json".equals(request.getContentType())){ if(ex instanceof BusinessException){ businessException = (BusinessException)ex; //错误信息 log.error(ex.getMessage(),ex); response.getWriter().write(Result.error(businessException.getCode(),ex.getMessage()).toString()); }else { log.error(ex.getMessage(),ex); response.getWriter().write(Result.error("-1", ex.getMessage()).toString()); } }else {<br /> <strong>//统一返回xml格式</strong> Message message = new Message(Constants.RESULT_FAIL); message.setScript(ex.toString()); response.setContentType("text/xml"); response.getWriter().write(XmlUtil.objectToString(message)); } } catch (IOException e) { log.error("与客户端通讯异常:"+ e.getMessage(), e); e.printStackTrace(); } ModelAndView modelAndView=new ModelAndView(); return modelAndView; } }
3).Spring配置文件添加
springMVC启动加载时会将所有的异常处理HandlerExceptionResolver实现类存放到handlerExceptionResolvers一个map结构中。
<bean id="exceptionResolver" class="com.*.exception.BusinessExceptionResolver"></bean>
4).使用方式(我这里只针对JSON)
返回格式:
json格式:
{
"success": false,
"errorcode": "10",
"errormsg": "特征值不能为空",
"data": null
}
xml格式:
<?xml version="1.0" encoding="UTF-8"?>
<Message code="00001" script="java.lang.NullPointerException" rowCount=""/>
目前知道的还可以定义很多异常来让框架简易。多学学总没错。
相关推荐
也许不会看见 2020-01-25
meleto 2020-08-15
也许不会看见 2020-06-28
横云断岭 2020-06-11
smalllove 2020-06-09
吾日五省我身 2020-06-08
Dullonjiang 2020-06-02
smalllove 2020-05-09
melonjj 2020-04-19
smalllove 2020-03-27
meleto 2020-03-08
whbing 2020-02-29
itjavashuai 2020-02-14
小鱿鱼 2020-02-11
横云断岭 2020-01-29
whbing 2019-12-08
lovejk 2019-11-16
Julywhj 2019-11-10