21.16.8 视图解析器

MVC提供的配置简化了视图解析器的注册工作。

以下的代码展示了在MVC Java编程配置下,如何为内容协商配置FreeMarker HTML模板和Jackson作为JSON数据的默认视图解析:

  1. @Configuration
  2. @EnableWebMvc
  3. public class WebConfig extends WebMvcConfigurerAdapter {
  4. @Override
  5. public void configureViewResolvers(ViewResolverRegistry registry) {
  6. registry.enableContentNegotiation(new MappingJackson2JsonView());
  7. registry.jsp();
  8. }
  9. }

在MVC XML命名空间下实现相同配置:

  1. <mvc:view-resolvers>
  2. <mvc:content-negotiation>
  3. <mvc:default-views>
  4. <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
  5. </mvc:default-views>
  6. </mvc:content-negotiation>
  7. <mvc:jsp/>
  8. </mvc:view-resolvers>

需要注意的是,使用FreeMarker, Velocity, Tiles, Groovy Markup及script模板作为视图技术时,仍需要配置一些其他选项。

MVC命名空间为每种视图都提供了相应的元素。比如下面代码是FreeMarker需要的配置:

  1. <mvc:view-resolvers>
  2. <mvc:content-negotiation>
  3. <mvc:default-views>
  4. <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
  5. </mvc:default-views>
  6. </mvc:content-negotiation>
  7. <mvc:freemarker cache="false"/>
  8. </mvc:view-resolvers>
  9. <mvc:freemarker-configurer>
  10. <mvc:template-loader-path location="/freemarker"/>
  11. </mvc:freemarker-configurer>

在MVC Java编程配置方式下,添加一个视图对应的“配置器”bean即可:

  1. @Configuration
  2. @EnableWebMvc
  3. public class WebConfig extends WebMvcConfigurerAdapter {
  4. @Override
  5. public void configureViewResolvers(ViewResolverRegistry registry) {
  6. registry.enableContentNegotiation(new MappingJackson2JsonView());
  7. registry.freeMarker().cache(false);
  8. }
  9. @Bean
  10. public FreeMarkerConfigurer freeMarkerConfigurer() {
  11. FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
  12. configurer.setTemplateLoaderPath("/WEB-INF/");
  13. return configurer;
  14. }
  15. }