@Controller
public class CentralizedExceptionController extends DefaultHandlerExceptionResolver {
@Override
protected ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex, HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("working?!");
return new ModelAndView();
}
我在我的代码中有这个,但是在404的情况下它从未被调用过。 (我的web.xml中没有定义错误页面,我不想这样做)
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您的Spring调度程序servlet配置为处理所有/大多数URL,那么您可能从控制台获得404错误以及此DispatcherServlet日志消息:
No mapping found for HTTP request with URI [xxx]
这表明Spring的DispatcherServlet正在处理请求,但没有适当的@RequestMapping来分派。
一个简单的解决方案是通过将web.xml的servlet-mapping > url-pattern
重新配置为仅由应用程序的@RequestMappings指定的URL来限制调度程序servlet处理的请求。但是,这不是很实用(所以不要这样做)。
克服这种情况的一种方法是创建一个@RequestMapping来处理所有“未处理的”请求映射 - 某种回退请求映射。
@RequestMapping("**")
@ResponseBody
public String fallbackRequestMapping() {
return "do something useful...";
}
请注意,这个答案与Dani的答案类似,但是考虑到基于注释的开发。因此,了解相关的Spring issue。
非常有用答案 2 :(得分:0)
检查。您的控制器类名称应不是Controller.java。
答案 3 :(得分:-1)
您需要对方法使用@ExceptionHandler
注释:
@ExceptionHandler(NoSuchRequestHandlingMethodException.class)
public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex, HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
...
}