1.全局异常拦截:针对所有异常进行拦截 可根据请求自定义返回格式

2.自定义异常类 处理不同业务的异常

接下来开始入手代码:

1).自定义异常类

  1. @ControllerAdvice//添加注解 记得开启spring的全局扫描
  2. public class BusinessException extends RuntimeException {
  3. private static final long serialVersionUID = 2332608236621015980L;
  4.  
  5. private String code;
  6. public BusinessException(String code,String message) {
  7. super(message);
  8. this.code = code;
  9. }
  10.  
  11. public BusinessException() {
  12. }
  13.  
  14. public String getCode() {
  15. return code;
  16. }
  17.  
  18. public void setCode(String code) {
  19. this.code = code;
  20. }
  21. }

2).全局异常处理器(对拦截到的异常进行分类处理)

  1. /**
  2. * 全局异常处理器
  3. * @author chenhao
  4. */
  5. public class BusinessExceptionResolver implements HandlerExceptionResolver {
  6. /**日志log*/
  7. private static Logger log = LoggerFactory.getLogger(BusinessExceptionResolver.class);
  8.  
  9. //系统抛出的异常
  10. @Override
  11. public ModelAndView resolveException(HttpServletRequest request,
  12. HttpServletResponse response, Object handler, Exception ex) {
  13. //handler就是处理器适配器要执行的Handler对象(只有method)
  14. //解析出异常类型。
  15. /* 使用response返回 */
  16. response.setStatus(HttpStatus.OK.value()); //设置状态码
  17. response.setContentType(MediaType.APPLICATION_JSON_VALUE); //设置ContentType
  18. response.setCharacterEncoding("UTF-8"); //避免乱码
  19. response.setHeader("Cache-Control", "no-cache, must-revalidate");
  20. //如果该 异常类型是系统 自定义的异常,直接取出异常信息。
  21. BusinessException businessException=null;
  22. try {
            //根据请求方式返回不同的格式(根据自己的业务需求实现,如果只返回一种格式的不用判断)
            //统一返回json 自定义了返回Result类 引入了Jackson
  23. if ("application/json".equals(request.getContentType())){
  24. if(ex instanceof BusinessException){
  25. businessException = (BusinessException)ex;
  26. //错误信息
  27. log.error(ex.getMessage(),ex);
  28. response.getWriter().write(Result.error(businessException.getCode(),ex.getMessage()).toString());
  29. }else {
  30. log.error(ex.getMessage(),ex);
  31. response.getWriter().write(Result.error("-1", ex.getMessage()).toString());
  32. }
  33. }else {
              //统一返回xml格式
  34. Message message = new Message(Constants.RESULT_FAIL);
  35. message.setScript(ex.toString());
  36. response.setContentType("text/xml");
  37. response.getWriter().write(XmlUtil.objectToString(message));
  38. }
  39.  
  40. } catch (IOException e) {
  41. log.error("与客户端通讯异常:"+ e.getMessage(), e);
  42. e.printStackTrace();
  43. }
  44. ModelAndView modelAndView=new ModelAndView();
  45.  
  46. return modelAndView;
  47. }
  48.  
  49. }

3).Spring配置文件添加

springMVC启动加载时会将所有的异常处理HandlerExceptionResolver实现类存放到handlerExceptionResolvers一个map结构中。

  1. <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=""/>

目前知道的还可以定义很多异常来让框架简易。多学学总没错。

Spring 全局异常拦截根据业务返回不同格式数据 自定义异常的更多相关文章

  1. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  2. SpringBoot 全局异常拦截捕获处理

    一.全局异常处理 //Result定义全局数据返回对象 package com.xiaobing.demo001.domain; public class Result { private Integ ...

  3. Spring 全局异常捕捉

    Spring全局异常捕捉类 注解@ControllerAdvice package com.sicdt.sicsign.web.bill.controller; import org.springfr ...

  4. Asp.Netcore使用Filter来实现接口的全局异常拦截,以及前置拦截和后置拦截

    原文链接:https://blog.csdn.net/qq_38762313/article/details/85234594 全局异常拦截器:       解决写每个接口都需要去做容错而添加try{ ...

  5. SpringBoot全局异常拦截

    SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...

  6. 返回json格式数据乱码

    本文为博主原创,未经允许不得转载: 原本返回json格式数据的代码: @ResponseBody @RequestMapping(value = "getListByTime", ...

  7. WebService返回json格式数据供苹果或者安卓程序调用

    1.新建一个WebService. 2. /// <summary> /// DemoToJson 的摘要说明 /// </summary> [WebService(Names ...

  8. 使用jQuery发送POST,Ajax请求返回JSON格式数据

    问题: 使用jQuery POST提交数据到PHP文件, PHP返回的json_encode后的数组数据,但jQuery接收到的数据不能解析为JSON对象,而是字符串{"code" ...

  9. Django 1.8.11 查询数据库返回JSON格式数据

    Django 1.8.11 查询数据库返回JSON格式数据 和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 环境 Win10 Python2.7 Django 1.8.11 返回多 ...

随机推荐

  1. 机器学习入门教程-k-近邻

    k-近邻算法原理 像之前提到的那样,机器学习的一个要点就是分类,对于分类来说有许多不同的算法,所谓的物以聚类,分以群分.我们非常的清楚,一个地域的人群,不管在生活习惯,还是在习俗上都是非常相似的,也就 ...

  2. 转:zabbix 更改maps图标

    更改Zabbix map图标 Zabbix的maps用来图形化显示监控设备的拓扑图,并且以不同的标记显示故障事件,通过该图表很直观的显示设备的整体情况.系统默认的图标比较简陋,如图十一所示.通过更改系 ...

  3. 使用 Git 删除本地仓库和远端仓库文件

    使用 git bash 来删除 一.将文件(夹)添加到暂存区 这里假设本地和远端都有一个 test.txt 文件先在本地删除,通过 ·git status 查看通过git add test.txt 添 ...

  4. 容易出错的JavaScript题目集锦

    容易出错的JavaScript题目集锦 1.typeof(null) 会得到什么?object,在JavaScript中null被认为是一个对象. 2.下列代码将输出控制台的是什么?为什么? 1234 ...

  5. Kafka配置文件及解释

    broker.id=0num.network.threads=9num.io.threads=24socket.send.buffer.bytes=102400listeners=PLAINTEXT: ...

  6. 没有admin权限如何免安装使用Node和NPM

    此教程只针对于在windows系统上没有admin权限和软件安装权限,但是又希望能像安装版一样使用Node和NPM的用户. 步骤一: 下载压缩版node 访问https://nodejs.org/en ...

  7. C++走向远洋——52(十三周阅读程序)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  8. Redis list实现原理 - 双向循环链表

    双向链表 双向表示每个节点知道自己的直接前驱和直接后继,每个节点需要三个域 查找方向可以是从左往右也可以是从右往左,但是要实现从右往左还需要终端节点的地址,所以通常会设计成双向的循环链表; 双向的循环 ...

  9. Hibernate和Mybatis的工作原理以及区别

    一.Mybatis的工作流程图 (1).原理详见: MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一 ...

  10. MySQL集群MGR架构for多主模式

    本文转载自: https://www.93bok.com MGR简介 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决 ...