您的位置:首页 > 编程语言 > Java开发

springmvc统一处理ajax异常

2017-10-10 13:59 363 查看
在xml配置

<!--  总错误统一处理  -->

    <bean id="exceptionResolver" class="com.exception.GlobalExceptionResolver">

        <property name="defaultErrorView">

            <value>../base/exception/error</value>

        </property>

        <property name="defaultStatusCode">

            <value>500</value>

        </property>

        <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值 -->

        <property name="exceptionMappings">

            <props>

                <prop key="comNoPermissionException">../base/exception/noPermission</prop>

                <prop key="com.NoRolesException">../base/exception/noRoles</prop>

            </props>

        </property>
    </bean>

为了能够对异常进行统一的处理,包括普通请求发生异常以及ajax请求发生异常时,我们可以覆写SimpleMappingHandlerExceptionResolver中的doResolveException()方法,判断是普通请求还是ajax请求。

1: package com.wbl.modal.exception;

2: 

3: import org.springframework.web.servlet.ModelAndView;

4: import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;

5: 

6: import javax.servlet.http.HttpServletRequest;

7: import javax.servlet.http.HttpServletResponse;

8: import java.io.IOException;

9: import java.io.PrintWriter;

10: 

11: /**

12:  * Created by Simple_love on 2015/9/10.

13:  */

14: public class GlobalExceptionResolver extends SimpleMappingExceptionResolver {

15: 

16:     @Override

17:     protected ModelAndView doResolveException(HttpServletRequest request,

18:                            HttpServletResponse response, Object handler, Exception ex){

19:         String viewName = determineViewName(ex,request);

20:         response.setCharacterEncoding("UTF-8");

21:         if (viewName != null) {// JSP格式返回

22:             if (!(request.getHeader("accept").contains("application/json")  || (request.getHeader("X-Requested-With")!= null && request

23:                 .getHeader("X-Requested-With").contains("XMLHttpRequest") ))) {

24:                 // 如果不是异步请求

25:                 // Apply HTTP status code for error views, if specified.

26:                 // Only apply it if we're processing a top-level request.

27:                 Integer statusCode = determineStatusCode(request, viewName);

28:                 if (statusCode != null) {

29:                     applyStatusCodeIfPossible(request, response, statusCode);

30:                 }

31:                 System.out.println("JSP格式返回" + viewName);

32:                 return getModelAndView(viewName, ex, request);

33:             } else {// JSON格式返回

34:
b1db
try {

35:                     PrintWriter writer = response.getWriter();

36:                     writer.write(ex.getMessage());

37:                     writer.flush();

38:                 } catch (IOException e) {

39:                     e.printStackTrace();

40:                 }

41:                 System.out.println("JSON格式返回" + viewName);

42:                 return null;

43:             }

44:         } else {

45:             return null;

46:         }

47:     }

48: }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ajax spring mvc 异常