Spring MVC

Spring MVC中ViewName的选取规则

通常情况下,Controller的mapping方法会返回一个ModelAndView对象来指定具体的view模板。但在方法返回值为void的情况下,spring mvc也会自动选取一个view name,具体的过程和规则如下:

在DispatcherServlet.java的核心方法doDispatch() 中,HandlerAdapter.handle()返回一个viewName为null的ModelAndView,之后交给applyDefaultViewName()进行处理,最终转至DefaultRequestToViewNameTranslator

它实现的规则是

  1. 从request获取请求的路径lookupPath,如/admin/user.jsp
  2. 去前后的斜线,得到admin/user.jsp
  3. 去文件扩展名,得到admin/user

以上规则适用于配置使用AnnotationMethodHandlerAdapter的情况,而这个Handler在Spring 3.2以后被Deprecated,默认的Handler为RequestMappingHandlerAdapter。

RequestMappingHandlerAdapter的处理逻辑有较大的不同,在mapping方法返回void的情况下,handler返回的ModelAndView为null,导致不再进入DefaultRequestToViewNameTranslator,此时会出现找不到view的错误,日志信息为

因此默认配置下需要显示地返回ModelAndView对象。

 

© 2014, 高飞航.cn. 版权所有.

About gaofeihang

开发工程师,本站的作者。欢迎留下您宝贵的意见!

发表评论

电子邮件地址不会被公开。 必填项已用*标注