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的版 ... 
随机推荐
- iOS为真机调试增加scribble来定位野指针
			尽管在ARC中,野指针出现的频率已经大大降低了,但是仍然会有野指针困扰着我们. 在模拟器调试中,我们可以开启scribble或者zombieObject来将已经释放的内存填充无意义的内容,能够将一些非 ... 
- mac 下修改jenkins的 端口号
			sudo defaults write /Library/Preferences/org.jenkins-ci httpPort 7070 
- HDU 3966 Aragorn's Story 树链剖分
			Link: http://acm.hdu.edu.cn/showproblem.php?pid=3966 这题注意要手动扩栈. 这题我交g++无限RE,即使手动扩栈了,但交C++就过了. #pragm ... 
- JS正则表达式元字符
			https://segmentfault.com/a/1190000002471140 
- Linux-文件和目录操作命令
			1. ls命令 显示当前目录下的内容,常见的参数有3个: -a -f -l 1 ls -a 显示隐藏文件 2 ls -F 在列出的文件后加符号 3 ls -l 长格式显示文件内容 2. cd命令 cd ... 
- bootstrap使用心得及css模块化的初步尝试
			第一次用bootstrap到实战项目,是一个企业门户站,可以说是强行拿bootstrap上来练手,感觉并不适合. 我是用的less编译bootstrap文件,直接改less变量.然后把不可重用的部分, ... 
- Redis 3.0正式版发布,正式支持Redis集群
			Redis是一个开源.基于C语言.基于内存亦可持久化的高性能NoSQL数据库,同时,它还提供了多种语言的API.近日,Redis 3.0在经过6个RC版本后,其正式版终于发布了.Redis 3.0的最 ... 
- upload&&download
			package am.demo; import java.io.File; import java.io.IOException; import java.util.Iterator; imp ... 
- Android编程容易犯的错误之二
			11.不要太相信工具,比如Eclipse里面的断点遇到多线程什么,经常不起作用/走不到,还有就是如果语句为空的也不会走,这时候别太早下结论断点地方出错了, 所以每个工程都应该有日志的开关,通过查看日志 ... 
- 4. UIButton的使用
			1. UIButton的初认识 来自:http://www.cnblogs.com/mcj-coding/p/5103891.html QQ:853740091 1.1 UIButton 是iOS 开 ... 
