SpringExceptionResolver.java

package com.mmall.common;

import com.mmall.exception.PermissionException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /*必须配置被spring管理,全局异常就会被捕捉 -> spring-servlet.xml*/
@Slf4j
public class SpringExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) {
String url = request.getRequestURL().toString();
ModelAndView mv;
String defaultMsg = "System error"; //如何判断请求时页面请求还是数据请求 .json .page
//要求项目中所有请求json数据,都是用.json结尾
if (url.endsWith(".json")){
//区分使用自定义message还是系统message
if (e instanceof PermissionException){
JsonData result = JsonData.fail(e.getMessage());
mv = new ModelAndView("jsonView", result.toMap());//jsonView 对应dispatcher中的bean id
}else {
//输出未知的异常
log.error("-----unknow json exception! url-----" + url,e);
JsonData result = JsonData.fail(defaultMsg);
mv = new ModelAndView("jsonView", result.toMap());
}
}else if (url.endsWith(".page")){//page页面使用.page结尾
log.error("-----unknow page exception! url-----" + url,e);
JsonData result = JsonData.fail(defaultMsg);
mv = new ModelAndView("exception", result.toMap());//对应exception.jsp
}else {
log.error("-----unknow other exception! url-----" + url,e);
JsonData result = JsonData.fail(defaultMsg);
mv = new ModelAndView("jsonView", result.toMap());//默认也返回json格式
}
return mv;
}
}

spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--上下文注解-->
<context:annotation-config />
<!--启动注解驱动的spring mvc 功能-->
<mvc:annotation-driven/> <!--启动包扫描-->
<context:component-scan base-package="com.mmall.controller" />
<context:component-scan base-package="com.mmall.service" /> <!--管理异常处理类 SpringExceptionResolver-->
<bean class="com.mmall.common.SpringExceptionResolver"/>
<!-- RequestMapping bean--><!--需要一个Handler来适配-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--处理请求的返回-->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp" />
</bean>
</beans>

最新文章

  1. php 图片上传的公共方法(按图片宽高缩放或原图)
  2. LoadRunner 函数之 web_custom_request
  3. BZOJ4503: 两个串
  4. oracle initialization or shutdown in progress问题解决步骤
  5. PHP Cannot redeclare class CLassName
  6. Java for LeetCode 050 Pow(x, n)
  7. freeswitch
  8. python:浅析python 中__name__ = &#39;__main__&#39; 的作用
  9. mongoDB知识总结
  10. javascript设计模式1
  11. 微信公众平台跳转网页url详解
  12. 学习经验分享(最近听了一节Java公开课)
  13. 在docker中初次体验.net core 2.0
  14. [转帖]golang操作mysql使用总结
  15. jq复制
  16. 《Redis 优化》
  17. linux下查找某文件关键字(grep 函数)
  18. excel导出的时候从程序后台写到excel里的是文本,所以无法在excel中计算怎么办?
  19. flex对象.show()的时候display变成block
  20. [UE4]使用另一个相机Scene Capture Component 2D当小地图

热门文章

  1. java获取一个时间段内的时间天数
  2. 使用icepdf将pdf文件转换成照片(以及隐藏的一个bug)
  3. discuz x3.3排行首页图片显示更多的图片
  4. oracle中删除表:drop、delete、truncate
  5. node 进程管理 child_process [spawn,exec] | 珠峰培训node正式课 网络爬虫
  6. router.beforeEach、路由元信息、导航守卫与函数式编程
  7. windows下redis的配置文件(redis.windows.conf)
  8. 数列分段II(信息学奥赛一本通 1436)(洛谷 1182)
  9. python 脚本接受参数
  10. kali linux 局域网攻击(一)