spring mvc异常统一处理(ControllerAdvice注解)
首先我的项目是一个为移动端提供的json数据的,当后台报错时如果为移动端返回一个错误页面显得非常不友好,于是通过ControllerAdvice注解返回json数据。
首先创建一个异常处理类:
package com.gefufeng.controller;
import com.gefufeng.common.exception.KnownBizException;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.http.HttpStatus;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MissingServletRequestParameterException;
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;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* Created by gefufeng on 16/7/18.
*/
@ControllerAdvice
public class ApplicationControllerExceptionHandler {
private static final Logger LOGGER = LogManager.getLogger(ApplicationControllerExceptionHandler.class);
@ExceptionHandler(value = Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public Map<String, Object> handlerError(HttpServletRequest req, Exception e) {
map.put("tip", "此错误说明调用接口失败,失败原因见msg,如果msg为空,联系后台");
map.put("msg", msg);
map.put("path", req.getRequestURI());
map.put("params", req.getParameterMap());
map.put("status", "0");
return map;
}
}
加上ControllerAdvice注解,注意这个类是在controller包下面,因为spring需要扫描到,
代码中的:
@ExceptionHandler(value = Exception.class)
表示捕捉到所有的异常,你也可以捕捉一个你自定义的异常,比如:
@ExceptionHandler(BusinessException.class)
@ResponseBody//这里加上这个注解才能返回json数据
public void handleBizExp(HttpServletRequest request, Exception ex){
}
@ExceptionHandler(SQLException.class)
public ModelAndView handSql(Exception ex){
ModelAndView mv = new ModelAndView();
return mv;
}
然后我在一个接口中故意抛出一个异常:
@RestController
@RequestMapping(value = "/customer",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class CustomerController extends BaseController{
@Autowired
CustomerService customerService;
@RequestMapping(value = "/getcustomer",method = RequestMethod.GET)
public String getCustomer(){
logger.info(EnvironmentUtils.isTest());
List<Customer> customers = customerService.getCustomerList();
throw new KnownBizException("已知的异常");
}
}
最后后台返回的数据是:
{
"msg": "已知的异常",
"path": "/myschool/customer/getcustomer",
"tip": "此错误说明调用接口失败,失败原因见msg,如果msg为空,联系后台",
"params": {},
"status": "0"
}
spring mvc异常统一处理(ControllerAdvice注解)的更多相关文章
- 【Java Web开发学习】Spring MVC异常统一处理
[Java Web开发学习]Spring MVC异常统一处理 文采有限,若有错误,欢迎留言指正. 转载:https://www.cnblogs.com/yangchongxing/p/9271900. ...
- spring mvc 异常统一处理方式
springMVC提供的异常处理主要有两种方式: 一种是直接实现自己的HandlerExceptionResolver: 另一种是使用注解的方式实现一个专门用于处理异常的Controller——Exc ...
- Spring MVC异常统一处理的三种方式
Spring 统一异常处理有 3 种方式,分别为: 使用 @ ExceptionHandler 注解 实现 HandlerExceptionResolver 接口 使用 @controlleradvi ...
- Spring MVC异常统一处理(包括普通请求异常以及ajax请求异常)
通常SpringMVC对异常的配置都是返回某个jsp视图给用户,但是通过ajax方式发起请求,即使发生异常,前台也无法获得任何异常提示信息.因此需要对异常进行统一的处理,对于普通请求以及ajax请求的 ...
- Spring MVC异常统一处理
package com.shzq.common.exception; import java.io.PrintWriter;import java.io.StringWriter;import jav ...
- spring mvc 异常统一处理
摘自: http://gaojiewyh.iteye.com/blog/1297746
- Spring MVC 4常用的那些注解
Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam, @ModelAttribute等等这样类似的注解.到目前为止,Spring的版 ...
- [转]Spring MVC 4常用的那些注解
Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam, @ModelAttribute等等这样类似的注解.到目前为止,Spring的版 ...
- 详解Spring MVC 4常用的那些注解
Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam, @ModelAttribute等等这样类似的注解.到目前为止,Spring的版 ...
随机推荐
- 第七届山东省ACM省赛
激动人心的省赛终于结束了…平静下来再回头看真的感觉一波三折…先是赛前毫无预兆的查出突发性耳聋…伴随而来的就是左耳听力下降.轻微耳鸣.极个别情况下的头晕…不过这都还好,毕竟药物可以恢复…热身赛只过了一道 ...
- BlockingQueue 阻塞队列,很有用的一种
BlockingQueue的核心方法:放入数据: offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳, 则返 ...
- log4net 运行时改变日志级别
((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root.Level = Level.Debug; ((log ...
- NVelocity介绍,NVelocity中文手册文档及实例下载
NVelocity是什么velocity英音:[vi'lɔsiti]美音:[və'lɑsətɪ]近在做一个项目,客户要求有网站模板功能,能够自主编辑网站的风格,因为这个系统是为政府部门做子站系统,举个 ...
- linux 用户创建、管理、权限分配
(1)su与sudo su:通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证: sudo: sudo扮 ...
- C++ explicit关键字详解
本文系转载,原文链接:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用 ...
- plist文件的读取和xib加载cell
plist 文件读取 例如在工程里倒入了plist文件 在工程里需要用到plist文件里的信息,就需要把plist文件读取出来. 如程序: -(NSArray *)moreDataArr{ if (! ...
- sqlserver 中row_number,rank,dense_rank,ntile排名函数的用法
1.row_number() 就是行号 2.rank:类似于row_number,不同之处在于,它会对order by 的字段进行处理,如果这个字段值相同,那么,行号保持不变 3.dense_rank ...
- xml Schema 基础
Schema比DTD好在哪儿? 后者简单易用,前者功能更强大也更复杂.DTD可以定义XML文档的结构,但无法对XML元素的内容进行约束,例如,如果希望某个XML元素的内容只能是日期型的数据,DTD就无 ...
- 51nod1228 序列求和(自然数幂和)
与UVA766 Sum of powers类似,见http://www.cnblogs.com/IMGavin/p/5948824.html 由于结果对MOD取模,使用逆元 #include<c ...