/ / supporto per le annotazioni jaxb di jackson in primavera - primavera, spring-mvc, jaxb, jackson

supporto per le annotazioni jsonb di jackson in primavera - primavera, primavera-mvc, jaxb, jackson

Sto cercando il modo più semplice per aggiungere il supporto delle annotazioni jaxb a Jackson. Jackson è stato aggiunto ora alla primavera di <mvc:annotation-driven/>. Ne ho bisogno @ResponseBody annotazione l'oggetto viene convertito in xml o json in modo dipendente dal tipo di supporto. Sono nuovo in primavera-mvc, quindi non capisco bene come funzionano le cose. Grazie.

risposte:

3 per risposta № 1

Ok, presumo che tu voglia essere in grado di restituire sia XML che JSON. Per fare questo è necessario creare MessageConverters per entrambi i formati.

Il convertitore di messaggi XML:

<bean id="xmlConverter"
class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<constructor-arg>
<oxm:jaxb2-marshaller id="jaxb2Marshaller">
<!-- you must either bind your JAXB annotated classes here -->
<!-- OR provide a jaxb.index and use contextPath -->
<oxm:class-to-be-bound name="com.mycompany.MyClass"/>
</oxm:jaxb2-marshaller>
</constructor-arg>
<property name="supportedMediaTypes">
<list>
<bean class="org.springframework.http.MediaType">
<constructor-arg index="0" value="application"/>
<constructor-arg index="1" value="xml"/>
<constructor-arg index="2" value="utf-8"/>
</bean>
</list>
</property>
</bean>

Il convertitore di messaggi JSON, che utilizza le annotazioni JAXB:

<bean id="jaxbAnnotationInspector"
class="org.codehaus.jackson.xc.JaxbAnnotationIntrospector"/>
<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper">
<property name="annotationIntrospector" ref="jaxbAnnotationInspector"/>
</bean>
<bean id="jsonConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper">
<bean ref="jacksonObjectMapper"/>
</property>
<property name="supportedMediaTypes">
<list>
<bean class="org.springframework.http.MediaType">
<constructor-arg index="0" value="application"/>
<constructor-arg index="1" value="json"/>
<constructor-arg index="2" value="utf-8"/>
</bean>
</list>
</property>
</bean>

E infine, il AnnotationMethodHandlerAdapter, che convertirà le risposte al tipo di contenuto appropriato, a seconda delle intestazioni di accettazione:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="xmlConverter"/>
<ref bean="jsonConverter"/>
</list>
</property>
</bean>

Nota che il supporto JAXB in jackson non è completo al 100% o corretto per tutto il tempo, ma gli sviluppatori sono davvero bravi a correggere bug e rispondere a segnalazioni di errori.