我正在尝试创建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添加此测试用例不需要的其他必需元素。
我将其他用户的答案标记为已接受。但是,上一段是解决问题的解决方案。
最佳答案
如果要返回字符串ReproduceError
,则用@ResponseBody
标记返回值。
另一方面,如果您有一个名为ReproduceError
的视图,则可能是您的视图解析器配置不正确?
编辑:好的,看起来像是要渲染ReproduceError
视图的视图,但是从日志文件看来,控制器方法没有被命中。