自动映射URL到View Spring MVC,无需控制器或映射注册

时间:2014-05-21 16:54:47

标签: java spring spring-mvc

我在Spring Boot之上构建了一个项目,使用了初学者:spring-boot-starter-webspring-boot-starter-thymeleafspring-boot-starter-security。因此,网络和百万美元的启动者使用webthymeleaf自动配置来设置一些基本的东西。所有配置都是通过java配置完成的。我有一堆控制器,驻留在classpath:/static/**中的静态文件和classpath:/templates中的模板。 Spring Boot自动配置负责提供带注释的控制器,百万美元模板和静态文件。

对于模板,我通过使用WebMvcConfigurerAdapter覆盖addViewControllers直接提供到视图映射的网址来提供服务,例如,映射网址/index查看index.htmlregistry.addViewController("/index").setViewName("index")完成。

我需要的是通过回退建立资源解析的URL层次结构,例如,如果我键入URL /x/y/z Spring应该检查:

  1. 对于控制器函数x/y/z
  2. 中的处理程序
  3. 对于bean处理x/y/z
  4. 对于居住在x/y/z
  5. 中的百里香叶模板
  6. 对于静态资源x/y/z
  7. ELSE RETURN NOT_FOUND 404
  8. 解决方案#1。用户M. Deinum建议在UrlFilenameViewControllerRequestMappingHandlerMapping中设置BeanNameHandlerMapping作为默认处理程序。

    CAVEAT。重定向通过将所有请求映射到UrlFilenameViewController来工作,视图得到正确解析,但静态资源,控制器URL和其他所有内容都被视为视图和百万富翁视图解析器通过抛出500错误而因为找不到模板而抱怨,所以没有优雅的后备。

    解决方案#2。使用SimpleUrlHandlerMapping添加映射"**/*.html"并将此请求重定向到UrlFilenameViewController

    CAVEAT。这使得控制器,静态资源和模板得到正确解析,因为请求被*.html映射隔离但是如果我再次键入/x/y/foo-bar-view.html,则百万富翁视图解析器会抱怨不存在的模板,所以再次没有优雅的回退。 / p>

    在检查所有指定的资源映射URL之后,理想情况下,解决方案最后应抛出404错误。

0 个答案:

没有答案