Spring将null的ModelAndView返回给DispatcherServlet

时间:2015-04-27 21:49:31

标签: java eclipse spring spring-mvc

我正在尝试创建一个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的其他必需元素,这些元素对于此测试用例不是必需的。

我会将其他用户的回答标记为已接受。但是,前一段是解决问题的解决方案。

1 个答案:

答案 0 :(得分:1)

如果您要返回字符串ReproduceError,请使用@ResponseBody标记返回值。

另一方面,如果您有一个名为ReproduceError的视图,那么您的视图解析器可能配置不正确吗?

编辑:好的,看起来像是ReproduceError视图的渲染,但是从日志文件中看来控制器方法似乎没有被击中。