gpt4 book ai didi

spring-mvc - 使用 HandlerExceptionResolver 处理 Spring MVC 异常

转载 作者:行者123 更新时间:2023-12-04 19:17:49 24 4
gpt4 key购买 nike

我目前正在尝试使用 HandlerExceptionResolver用于 Spring MVC 项目中的异常处理。

我想通过 resolveException 处理正常的异常以及 404 的通过handleNoSuchRequestHandlingMethod .

根据请求类型 JSON 或 text/html,应该适本地返回异常响应。
resolveException现在工作。

但是handleNoSuchRequestHandlingMethod让我头疼。从来没叫过!

根据文档,应该在 404 错误时调用该方法

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.html

我究竟做错了什么...

这是我到目前为止。

public class JsonExceptionResolver implements HandlerExceptionResolver {

protected final Log logger = LogFactory.getLog(getClass());

public ModelAndView resolveException(HttpServletRequest request,
if (exception instanceof NoSuchRequestHandlingMethodException) {
return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException) exception, request, response, handler);
}
...
}

public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex,
HttpServletRequest request,
HttpServletResponse response,
Object handler){

logger.info("Handle my exception!!!");

ModelAndView mav = new ModelAndView();
boolean isJSON = request.getHeader("Accept").equals("application/json");

if(isJSON){
...

}else{
..
}

return mav;
}

}

使用 DefaultHandlerExceptionResolver 进行编辑 :
public class MyExceptionResolver extends  DefaultHandlerExceptionResolver {

protected final Log logger = LogFactory.getLog(getClass());

@Override
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) {
logger.warn("An Exception has occured in the application", exception);


logger.info("exception thrown " + exception.getMessage() );
if (exception instanceof NoSuchRequestHandlingMethodException) {
return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException) exception, request, response, handler);
}

...
return mav;
}

public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex,
HttpServletRequest request,
HttpServletResponse response,
Object handler){

logger.info("Handle my exception!!!");

ModelAndView mav = new ModelAndView();
boolean isJSON = request.getHeader("Accept").equals("application/json");

if(isJSON){

...
}else{
...
}

return mav;
}
}

上面的代码还是没有效果。

还有其他想法吗?

最佳答案

根据来自 Spring 的 Juergen Hoeller 的说法,这是不可能的 HandlerExceptionResolver因为它只适用于子映射,例如

你有一个映射到 /account/** 的 Controller 并从不存在映射的 acount 访问方法,例如 /acount/notExists比它应该工作。

我会开一个JIRA 改进 此功能的票

编辑:

关于这个问题的JIRA票

https://jira.springsource.org/browse/SPR-8837?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=72648#comment-72648

关于spring-mvc - 使用 HandlerExceptionResolver 处理 Spring MVC 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7228622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com