码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC实现全局异常处理

时间:2018-07-16 22:18:32      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:iter   on()   framework   handler   bsp   失败   data   vax   状态   

  • 在springMVC中进行全局异常处理的配置
<bean class="cn.znx.blog.exception.MyExceptionResolver"></bean>
  • 定义全局异常处理类:需要实现HandlerExceptionResolver接口
package cn.znx.blog.exception;

import com.google.gson.Gson;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

public class MyExceptionResolver implements HandlerExceptionResolver {

    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
                                         Exception exception) {
        //打印错误信息
        exception.printStackTrace();
        //定义错误信息
        String message = "系统繁忙,请稍后重试!";
        if(exception instanceof MyException){
            message = ((MyException)exception).getMessage();
        }
        //判断请求类型
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        ResponseBody responseBody = handlerMethod.getMethod().getAnnotation(ResponseBody.class);
        //如果是json请求,则返回json数据
        if(responseBody!=null){
            Map<String,Object> responseMap = new HashMap<String,Object>();
            responseMap.put("code", "999999");
            responseMap.put("message", message);
            String json = new Gson().toJson(responseMap);
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/json;charset=utf-8");
            try {
                response.getWriter().write(json);
                response.getWriter().flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return new ModelAndView();
        }
        //如果是跳转页面的请求
        //页面转发
        ModelAndView modelAndView = new ModelAndView();
        //将错误信息传到页面
        modelAndView.addObject("message", message);
        //指向错误页面
        modelAndView.setViewName("error");
        return modelAndView;
    }

}
  • 自定义异常
package cn.znx.blog.exception;

import com.google.gson.Gson;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

public class MyExceptionResolver implements HandlerExceptionResolver {

    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
                                         Exception exception) {
        //打印错误信息
        exception.printStackTrace();
        //定义错误信息
        String message = "系统繁忙,请稍后重试!";
        if(exception instanceof MyException){
            message = ((MyException)exception).getMessage();
        }
        //判断请求类型
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        ResponseBody responseBody = handlerMethod.getMethod().getAnnotation(ResponseBody.class);
        //如果是json请求,则返回json数据
        if(responseBody!=null){
            Map<String,Object> responseMap = new HashMap<String,Object>();
            responseMap.put("code", "999999");
            responseMap.put("message", message);
            String json = new Gson().toJson(responseMap);
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/json;charset=utf-8");
            try {
                response.getWriter().write(json);
                response.getWriter().flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return new ModelAndView();
        }
        //如果是跳转页面的请求
        //页面转发
        ModelAndView modelAndView = new ModelAndView();
        //将错误信息传到页面
        modelAndView.addObject("message", message);
        //指向错误页面
        modelAndView.setViewName("error");
        return modelAndView;
    }

}
  •  定义JSON响应类:
@Data
public class Result {

    //状态码
    private String code;

    //错误信息
    private String message;
    //还是json
    private HashMap<String,Object> data = new HashMap<>();

    //登录失败
    public static Result error(String string){

        Result result = new Result();
        result.setCode("999999");
        if (StringUtils.isEmpty(string)){
            result.setMessage("登录失败");
        }else{
            result.setMessage(string);
        }
        return result;
    }

    //添加数据
    public Result add(String key,Object value){
        this.getData().put(key,value);

        return this;
    }

    //登录成功
    public static Result success(){
        Result result = new Result();
        result.setCode("000000");
        result.setMessage("登录成功");
        return result;
    }
    
}

 

SpringMVC实现全局异常处理

标签:iter   on()   framework   handler   bsp   失败   data   vax   状态   

原文地址:https://www.cnblogs.com/zhangnianxiang/p/9320660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!