介绍
RESTful服务中很重要的一个特性即是同一资源,多种表述我们使用ContentNegotiatingViewResolver就可以做到,这个视图解析器允许你用同样的内容数据来呈现不同的view。
有三种格式:
http://www.test.com/user.xml
Accept:application/xml
http://www.test.com/user?format=xml
属性
order:如果有多个的解析器,用于设置解析器的执行顺序。
defaultContentType:如果所有的mediaType都没匹配上,就会使用defaultContentType设置的类型。
avorPathExtension:是否启用扩展名支持,默认是true。
favorParameter:是否启用参数支持,默认是true。
ignoreAcceptHeader:是否忽略掉accept header,默认是false。
mediaTypes:扩展名到mimeType的映射,里面是map。
出现的问题
我今天在配置多视图解析器的时候,发现里面的属性不一样了,根本没有mediaTypes属性,所以我百度一下后,发现全是没用的信息,我就去看了一下官方文档,官方文档里面并没有说为什么替换了mediaTypes,
但是写了可以用ContentNegotiationManager去配置扩展名的映射。
然后我看了一下源码,发现有些头疼,我又百度了一下ContentNegotiationManager,找到了样例。
从spring 3.1.0升级到spring 3.2.0时, spring3.2开始不推荐使用setMediaTypes等直接设置这些数据, 而是通过ContentNegotiationManager(ContentNegotiationManagerFactoryBean),所以采用map标签的方式直接转换会出现异常信息。
1 | <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> |