SpringMVC实现全局异常处理

  • 在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;
    }

}

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

时间: 2024-11-06 15:06:09

SpringMVC实现全局异常处理的相关文章

SpringMVC的全局异常处理

@ControllerAdvice的使用 我们都知道做项目一般都会有全局异常统一处理的类,那么这个类在Spring中可以用@ControllerAdvice来实现. @ControllerAdvice ,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller.使用这个 Controller ,可以实现三个方面的功能: 全局异常处理 全局数据绑定 全局数据预处理 灵活使用这三个功能,可以帮助我们简化很多工作,需要注意的是,这是 SpringMVC 提供的功能,在 Spring Bo

springMVC学习(9)-全局异常处理

一.异常处理思路: 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统的dao.service.controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图: springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理. 二.自定义异常类 继承Exception 1 pa

SpringMVC 全局异常处理

在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大.SpringMvc 对于异常处理这块提供了支持,通过 SpringMvc 提供的全局异常处理机制,能够将所有类型的异常处从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护. 全局异常实现方式 Spring MVC

全局异常处理springmvc

一.实现HandlerExceptionResolver接口 /** * springmvc 全局异常处理 */ @Slf4j public class GlobalExceptionResolver implements HandlerExceptionResolver{ @Override public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpSe

WEB 项目中的全局异常处理

在web 项目中,遇到异常一般有两种处理方式:try.....catch....:throw 通常情况下我们用try.....catch.... 对异常进行捕捉处理,可是在实际项目中随时的进行异常捕捉,会造成代码重复和繁杂,我们希望代码中只有业务相关的操作,所有的异常我们单独设立一个类来处理它. 首先,我们在可能发生异常的方法,全部throw出来,即dao抛给service.service给controller.controller抛给前端控制器: 然后由前端控制器调用 全局异常处理器  对异常

Spring Boot 2 Webflux的全局异常处理

https://www.jianshu.com/p/6f631f3e00b9 本文首先将会回顾Spring 5之前的SpringMVC异常处理机制,然后主要讲解Spring Boot 2 Webflux的全局异常处理机制. SpringMVC的异常处理 Spring 统一异常处理有 3 种方式,分别为: 使用 @ExceptionHandler 注解 实现 HandlerExceptionResolver 接口 使用 @controlleradvice 注解 使用@ExceptionHandle

第二十三章 springboot + 全局异常处理

一.单个controller范围的异常处理 1 package com.xxx.secondboot.web; 2 3 import org.springframework.web.bind.annotation.ExceptionHandler; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RequestMeth

Struts2全局异常处理

1.在struts.xml中配置全局异常处理 在Action中抛出异常,此异常可以是action自己抛的,也可以是Service抛出来的,都会跳转到全局异常中,只有在当前Action中配置域全局异常返回的result中name相同的result,就能跳转到指定错误视图 并在struts.xml中对应Action中配置跳转的error视图: JSP中通过Struts标签并结合OGNL表达式从值栈中获取懂啊异常信息显示出来,如果不知道值栈中异常对象的名称可以先<s:debugger>看一下,如:

服务端增加WCF服务全局异常处理机制

转自:http://www.csframework.com/archive/1/arc-1-20150109-2193.htm 服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. 1 /// <summary> 2 /// WCF服务端异常处理器 3 /// </summary> 4 public class WCF_Exceptio