SpringBoot2.x系列教程28--整合SpringMVC之内容协商ContentNegotiatingViewResolver
作者:一一哥
我们在上一章节中,讲解了ContentNegotiating内容协商的使用及简单原理分析,上一章节主要是讲解内容协商在HttpMessage上的作用。
其实内容协商不仅仅可以作用在HttpMessage上,还可以作用在View视图上,本章节我讲解该内容。
一.内容协商视图解析器
1.概述
ContentNegotiatingViewResolver自己并不解析视图,而是委派给其他的视图处理器。
为了使这个解析器正常工作,order序号需要设置成比其他的视图处理器高的优先级(默认就是最高的)。
2. ContentNegotiatingViewResolver细节:
- ContentNegotiationManager用于内容协商的策略可以手动设置指定,也可以通过FactoryBean自动生成;
- viewResolvers默认是去容器内找到所有的,当然你也可以手动set进来;
- 使用request的媒体类型,根据扩展名选择不同的view输出不同的格式;
- 不是自己处理view,而是代理给不同的ViewResolver来处理不同的view;
- 默认是支持Accept和后缀的协商方式的。并且还支持 逻辑视图名.后缀的视图解析方式;
- 依据View.getContentType匹配MediaType来完成的最佳匹配。
二.ContentNegotiatingViewResolver使用
在默认情况下,Spring MVC并没有开启ContentNegotiatingViewResolver内容协商视图解析器,因此如果有同一接口资源,要用多视图展示的需求,我们是需要自己手动配置来实现的。
所以接下来我带大家,对同一个接口资源,返回多个View。
1. 需求介绍
我们要对同一个RESTful风格的URL,根据请求的不同,可以得到一个PDF视图,一个JSON视图,一个Html视图。
2. 创建web项目(略)
参照之前的案例,我们创建一个新的web项目,过程略去。