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 {
        //根据请求方式返回不同的格式(根据自己的业务需求实现,如果只返回一种格式的不用判断)
        //统一返回json 自定义了返回Result类 引入了Jackson
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 {
          //统一返回xml格式
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=""/>

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

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. 18.09.22模拟赛T2 历史

    网上基本上找不到这道题,何况LJJ还稍微改了一下...... 原题:传送门 题目描述 ljj 被S 国数不清的漂亮小姐姐所吸引,为了搞清楚为什么S 国有如此多的漂亮小姐姐,他决定研究S 国的历史. 根 ...

  2. 吴裕雄--天生自然 R语言开发学习:回归(续三)

    #------------------------------------------------------------# # R in Action (2nd ed): Chapter 8 # # ...

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

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

  4. 红灯区:DevOps 建设的思考和实践

    点击关注"有赞coder" 获取更多技术干货哦- 作者:费解 团队:效能改进 背景 众所周知,在丰田精益生产中,核心观念包含对人的尊重.消除浪费.持续改善,只有这样,企业才能保持良 ...

  5. stat()函数--------------获取文件信息

    stat():用于获取文件的状态信息,使用时需要包含<sys/stat.h>头文件. 函数原型:int stat(const char *path, struct stat *buf): ...

  6. 20190407-ORID

    2019-04-07 Objective 关于今天的课程,你记得什么? 给代码建立分支的操作 完成了什么? 完成了rails101前6节 Relective 今天的高峰是什么? 成功完成rails10 ...

  7. LeetCode---二叉树3-总结例题

    二叉树-总结例题 1-从中序与后序遍历序列构造二叉树 给定二叉树的后序遍历和二叉树的中序遍历 想法: 先根据后序遍历的最后一个元素构造根节点 寻找根节点在中序遍历中的位置 递归构建根节点的左右子树 / ...

  8. vue+element 表单封成组件(2)

    今天我们继续把时间选择器,多选框和单选框加上 父组件(在昨天的基础上增加): <template> <el-form :model="ruleForm" ref= ...

  9. win10查看本机mac地址的详细操作

    今天和大家分享win10查看本机mac地址的方法,mac地址是什么东西?MAC地址实际上就是网卡的一个标识,和身份证号码类似,大多数情况下是不需要关心MAC地址是多少的,一般不能改动,所以也不会重复. ...

  10. 网络|Trojan 网络代理服务搭建

    Trojan 网络代理服务搭建 前言 本文目的在于帮助相同困惑的网友,让使用更加简单. Trojan为Trojan-GFW开源的一款新思路网络代理软件, 前期准备 [x] 服务器:系统CentOS 7 ...