如何找出@ExceptionHandler 不起作用的原因?
How to find out why @ExceptionHandler don't work?
在我的项目中,当我在我的控制器中添加异常处理程序方法时,它不起作用。但是,如果我将此代码移动到具有相同 Spring 版本的演示项目,则 missingParamterHandler 方法运行良好。谁能帮我处理这个问题?
@Controller
@RequestMapping("/order")
public class OrderControlle{
@ExceptionHandler(Exception.class)
public @ResponseBody ClientResult missingParamterHandler(Exception exception) {
/*inspect and exception and obtain meaningful message*/
ClientResult clientResult = new ClientResult();
clientResult.getBstatus().setCode(BstatusCode.PARAM_ERR);
return clientResult;
}
}
我试debug,发现在Spring的DispatcherServlet.java, matchingBeans.isEmpty() returns 是的,是不是@ExceptionHandler(Exception.class) 在我的项目中不起作用?
private void initHandlerExceptionResolvers(ApplicationContext context) {
this.handlerExceptionResolvers = null;
if (this.detectAllHandlerExceptionResolvers) {
// Find all HandlerExceptionResolvers in the ApplicationContext, including ancestor contexts.
Map<String, HandlerExceptionResolver> matchingBeans = BeanFactoryUtils
.beansOfTypeIncludingAncestors(context, HandlerExceptionResolver.class, true, false);
if (!matchingBeans.isEmpty()) {
this.handlerExceptionResolvers = new ArrayList<HandlerExceptionResolver>(matchingBeans.values());
// We keep HandlerExceptionResolvers in sorted order.
OrderComparator.sort(this.handlerExceptionResolvers);
}
}
.....
显式添加<bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver" />
或<mvc:annotation-driven />
到app-context.xml,解决我的问题。
如果没有上面这行,spring 在我的项目中添加 ExceptionResolvers,如下所示。
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
在我的项目中,当我在我的控制器中添加异常处理程序方法时,它不起作用。但是,如果我将此代码移动到具有相同 Spring 版本的演示项目,则 missingParamterHandler 方法运行良好。谁能帮我处理这个问题?
@Controller
@RequestMapping("/order")
public class OrderControlle{
@ExceptionHandler(Exception.class)
public @ResponseBody ClientResult missingParamterHandler(Exception exception) {
/*inspect and exception and obtain meaningful message*/
ClientResult clientResult = new ClientResult();
clientResult.getBstatus().setCode(BstatusCode.PARAM_ERR);
return clientResult;
}
}
我试debug,发现在Spring的DispatcherServlet.java, matchingBeans.isEmpty() returns 是的,是不是@ExceptionHandler(Exception.class) 在我的项目中不起作用?
private void initHandlerExceptionResolvers(ApplicationContext context) {
this.handlerExceptionResolvers = null;
if (this.detectAllHandlerExceptionResolvers) {
// Find all HandlerExceptionResolvers in the ApplicationContext, including ancestor contexts.
Map<String, HandlerExceptionResolver> matchingBeans = BeanFactoryUtils
.beansOfTypeIncludingAncestors(context, HandlerExceptionResolver.class, true, false);
if (!matchingBeans.isEmpty()) {
this.handlerExceptionResolvers = new ArrayList<HandlerExceptionResolver>(matchingBeans.values());
// We keep HandlerExceptionResolvers in sorted order.
OrderComparator.sort(this.handlerExceptionResolvers);
}
}
.....
显式添加<bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver" />
或<mvc:annotation-driven />
到app-context.xml,解决我的问题。
如果没有上面这行,spring 在我的项目中添加 ExceptionResolvers,如下所示。
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver