我正在尝试创建一个spring mvc项目的最小复制品,用于诊断更复杂项目中的错误。但是当我尝试单击触发控制器方法的url时,eclipse控制台会发出一个错误,指示ModelAndView为null。虽然this other question询问了类似的错误,但您可以看到问题没有得到解答,因为有四个不同的人对评论提出了+1,答案需要详细说明。我也查看了this other posting,但遵循它使用org.springframework.web.servlet.ModelAndView
而不是Map的建议并没有解决问题。此外,我想尽可能使用Map,因为Map适用于我更复杂的应用程序。 如何解决此错误?
以下是抛出错误时调用的控制器方法:
@RequestMapping(value = "/TriggerTheError", method = RequestMethod.GET)
public String processFindForm(HttpServletRequest request, BindingResult result, Map<String, Object> model) {
return "ReproduceError";
}
当调用上述控制器方法时,控制台会打印出以下日志:
13:59:10.874 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'MinimalDbaseExample' processing GET request for [/MinimalDbaseExample/TriggerTheError]
13:59:10.874 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Looking up handler method for path /TriggerTheError
13:59:10.874 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Did not find handler method for [/TriggerTheError]
13:59:10.875 [http-nio-8080-exec-3] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping - Matching patterns for request [/TriggerTheError] are [/**]
13:59:10.875 [http-nio-8080-exec-3] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping - URI Template variables for request [/TriggerTheError] are {}
13:59:10.875 [http-nio-8080-exec-3] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping - Mapping [/TriggerTheError] to HandlerExecutionChain with handler [org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler@186a461c] and 1 interceptor
13:59:10.875 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - Last-Modified value for [/MinimalDbaseExample/TriggerTheError] is: -1
13:59:10.875 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'MinimalDbaseExample': assuming HandlerAdapter completed request handling
13:59:10.875 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - Successfully completed request
回答
解决方案是简单地删除BindingResult,因为在这种情况下不需要它。通过从控制器方法的参数中删除BindingResult,错误被删除。稍后,如果需要BindingResult,那么解决方案就是添加BindingResult的其他必需元素,这些元素对于此测试用例不是必需的。
我会将其他用户的回答标记为已接受。但是,前一段是解决问题的解决方案。
答案 0 :(得分:1)
如果您要返回字符串ReproduceError
,请使用@ResponseBody
标记返回值。
另一方面,如果您有一个名为ReproduceError
的视图,那么您的视图解析器可能配置不正确吗?
编辑:好的,看起来像是ReproduceError
视图的渲染,但是从日志文件中看来控制器方法似乎没有被击中。