视图解析器

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

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

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void configureViewResolvers(ViewResolverRegistry registry) { 
        registry.enableContentNegotiation(new MappingJackson2JsonView()); 
        registry.jsp(); 
    } 

} 

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

<mvc:view-resolvers> 
    <mvc:content-negotiation> 
        <mvc:default-views> 
            <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/> 
        </mvc:default-views> 
    </mvc:content-negotiation> 
    <mvc:jsp/> 
</mvc:view-resolvers> 

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

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

<mvc:view-resolvers> 
    <mvc:content-negotiation> 
        <mvc:default-views> 
            <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/> 
        </mvc:default-views> 
    </mvc:content-negotiation> 
    <mvc:freemarker cache="false"/> 
</mvc:view-resolvers> 

<mvc:freemarker-configurer> 
    <mvc:template-loader-path location="/freemarker"/> 
</mvc:freemarker-configurer> 

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

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void configureViewResolvers(ViewResolverRegistry registry) { 
        registry.enableContentNegotiation(new MappingJackson2JsonView()); 
        registry.freeMarker().cache(false); 
    } 

    @Bean 
    public FreeMarkerConfigurer freeMarkerConfigurer() { 
        FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); 
        configurer.setTemplateLoaderPath("/WEB-INF/"); 
        return configurer; 
    } 

}