Spring 转换服务和内容协商管理器在春季的目的是什么?
春季Spring 转换服务和内容协商管理器在春季的目的是什么?,spring,spring-mvc,Spring,Spring Mvc,春季转换服务和内容协商管理器的目的是什么?我们在Spring appContext中有这个功能,但我不确定它的用途 对于内容协商管理器: 我在这里读到: 内容协商管理器就像@RequestMapping的“解析器”——例如,如果我的映射URL是“/person/create”——当客户端访问/person/create.json和/person/create.html时,将调用它(给定以下配置) 我还可以访问/person/list.xml,即使未在内容协商管理器中定义xml,它也会返回xml
转换服务
和内容协商管理器
的目的是什么?我们在Spring appContext中有这个功能,但我不确定它的用途
对于
内容协商管理器
:
我在这里读到:
内容协商管理器就像@RequestMapping
的“解析器”——例如,如果我的映射URL是“/person/create”——当客户端访问/person/create.json和/person/create.html时,将调用它(给定以下配置)
我还可以访问/person/list.xml,即使未在内容协商管理器中定义xml,它也会返回xml结果,因为我的类路径中有Jackson:
对于请求URI中的文件扩展名,MVC Java配置和
MVC命名空间,自动注册扩展,如.json、.xml、,
.rss和.atom,如果相应的依赖项(如Jackson),
JAXB2或Rome出现在类路径上
因此,我们定义了内容协商管理器
,因为我们支持html,默认情况下不映射它。我的理解正确吗
对于转换服务
:
在我们的类中,我们有一个ObjectMapper.readValue(json,Obj.class)
和@RestController
根据请求返回xml/json格式的对象(如果访问/list.xml,它将返回xml格式;如果访问/list.json,它将返回json格式)。但是我读到@RestController可以在没有转换服务的情况下工作。因此,我不确定为什么在
转换服务和内容协商管理器始终由Spring MVC使用,无论您是否定义它们。您可以根据需要配置它们。这里就是这样 例如,
name=“defaultContentType”value=“application/json”
意味着如果客户端不喜欢特定的媒体类型,服务器应该发回json
<mvc:annotation-driven conversion-service="conversionService" content-negotiation-manager="contentNegotiationManager"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="html" value="text/html"/>
</map>
</property>
<property name="defaultContentType" value="application/json"/>
</bean>