2016-03-28 4 views
0

Was ist der Zweck von und content-negotiation-manager im Frühjahr? Wir haben dies in unserem Frühling appContext, aber ich bin mir nicht sicher über seinen Zweck.Was ist der Zweck von Conversion-Service und Content-Negotiation-Manager im Frühjahr?


Für content-negotiation-manager:

Ich habe hier gelesen: http://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-config-content-negotiation, dass die inhaltlichen verhandlungs Manager verhält sich wie ein 'Resolver' für @RequestMapping - z.B. Wenn meine Zuordnungs-URL "/ person/create" lautet, wird sie aufgerufen, wenn der Client auf /person/create.json und /person/create.html zugreift (bei der folgenden Konfiguration).

Ich bin auch in der Lage /person/list.xml zugreifen und es gibt ein XML-Ergebnis auch wenn xml nicht in den content-negotiation-manager definiert ist, da ich die Jackson in meinem Classpath habe:

Für Dateierweiterungen in Der Anforderungs-URI, die MVC-Java-Konfiguration und der MVC-Namespace registrieren automatisch Erweiterungen wie .json, .xml, .rss und .atom, wenn die entsprechenden Abhängigkeiten wie Jackson, JAXB2 oder Rome im Klassenpfad vorhanden sind .

Also haben wir die content-negotiation-manager definiert, da wir HTML unterstützen, und es ist nicht standardmäßig zugeordnet. Ist mein Verständnis richtig?


Für :

In unseren Klassen, haben wir ein ObjectMapper.readValue(json, Obj.class) und @RestController ein Objekt in XML/JSON-Format Rückkehr auf die Anfrage nach (es ein XML-Format zurückgibt, wenn Sie /list.xml zugreifen und gibt das JSON-Format zurück, wenn Sie auf /list.json zugreifen. Aber ich habe gelesen, dass @RestController ohne den Konvertierungsdienst arbeiten kann. So bin ich nicht sicher, warum es in der <mvc:annotation-driven>

<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> 

Antwort

0

Sowohl die Umwandlung Service und den Inhalt negotation Manager sind immer von Spring MVC verwendet geliefert wird, unabhängig davon, ob Sie sie definieren oder nicht. Sie können sie nach Ihren Bedürfnissen konfigurieren. Das ist hier der Fall.

z. name="defaultContentType" value="application/json" bedeutet, dass der Server JSON zurücksenden sollte, wenn der Client keinen bestimmten Medientyp vorzieht.