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>