全局异常处理类不起作用?
来源:6-3 接口请求全局异常处理-设计与验证

北斗神拳1984
2018-07-16
<bean id="springExceptionResolver" class="com.mmall.common.SpringExceptionResolver"/>
我没加入id属性的时候,就直接显示500异常,根本没有进入异常处理类,但是老师课程里没加id也是正常的。
为什么我的环境会出现这种情况呢?
7回答
-
Jimin
2018-07-16
你现在这个代码最后出来的不是json格式?如果返回的是json格式的话,那就说明没问题了。你是在SpringExceptionResolver里加断点,抛异常后,调试的代码没走到吗?012018-07-16 -
北斗神拳1984
提问者
2018-07-16
package com.mmall.common;
import com.mmall.exception.ParamException;
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;
@Slf4j
public class SpringExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
String url = request.getRequestURL().toString();
ModelAndView mv;
String defaultMsg = "System error";
//.json请求json的接口,.page请求页面的接口
//这里我们要求项目中所有请求json数据,都使用.json结尾
if (url.endsWith(".json")){
if (ex instanceof PermissionException || ex instanceof ParamException){
JsonData result = JsonData.fail(ex.getMessage());
mv = new ModelAndView("jsonView",result.toMap());
}else {
log.error("unknown json exception,url"+url,ex);
JsonData result = JsonData.fail(defaultMsg);
mv = new ModelAndView("jsonView",result.toMap());
}
}else if (url.endsWith(".page")){//这里我们要求项目中所有请求page页面,都使用.page结尾
log.error("unknown page exception,url"+url,ex);
JsonData result = JsonData.fail(defaultMsg);
mv = new ModelAndView("exception",result.toMap());
}else {
log.error("unknown exception,url"+url,ex);
JsonData result = JsonData.fail(defaultMsg);
mv = new ModelAndView("jsonView",result.toMap());
}
return mv;
}
}00 -
北斗神拳1984
提问者
2018-07-16
<?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 />
<!-- 启动注解驱动的springMVC功能 -->
<mvc:annotation-driven/>
<!-- 启动包扫描 -->
<context:component-scan base-package="com.mmall.controller"/>
<context:component-scan base-package="com.mmall.service"/>
<!-- 处理requestMapping的映射和视图的解析 -->
<!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>-->
<bean class="com.mmall.common.SpringExceptionResolver"/>
<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="/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>00 -
北斗神拳1984
提问者
2018-07-16
package com.mmall.controller;
import com.mmall.common.JsonData;
import com.mmall.exception.PermissionException;
import com.mmall.param.TestVo;
import com.mmall.util.BeanValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map;
@Controller
@RequestMapping("/test")
@Slf4j
public class TestController {
@RequestMapping("/hello.json")
@ResponseBody
public JsonData hello(){
log.info("hello");
throw new PermissionException("test exception");
// return JsonData.success("hello,permission");
}
@RequestMapping("/validate.json")
@ResponseBody
public JsonData validate(TestVo vo){
log.info("validate");
try {
Map<String,String> map = BeanValidator.validateObject(vo);
if (map != null && map.entrySet().size() > 0){
for (Map.Entry<String,String> entry:map.entrySet()){
log.info("{}->{}",entry.getKey(),entry.getValue());
}
}
}catch(Exception e){
}
return JsonData.success("test validate");
}
}00 -
Jimin
2018-07-16
你目前贴的这个异常,属于正常业务测试的异常,不是配置出现的异常。
这样吧,你把SpringExceptionResolver这个类的代码及相关的配置和测试的代码都发一下我看看吧,应该是哪里细节配置的有问题。
00 -
北斗神拳1984
提问者
2018-07-16
HTTP Status 500 - Request processing failed; nested exception is com.mmall.exception.PermissionException: test exception
type Exception report
message Request processing failed; nested exception is com.mmall.exception.PermissionException: test exception
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.mmall.exception.PermissionException: test exception
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)root cause
com.mmall.exception.PermissionException: test exception
com.mmall.controller.TestController.hello(TestController.java:19)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)note The full stack trace of the root cause is available in the Apache Tomcat/7.0.73 logs.
00 -
Jimin
2018-07-16
你好,500异常的详细堆栈情况发出来看一下
00
相似问题