/ / jackson jaxb annotations support em Primavera - primavera, primavera - mvc, jaxb, jackson

suporte a anotações de jackson jaxb em Primavera - primavera, mvc, jaxb, jackson

Eu estou procurando a maneira mais simples de adicionar suporte a anotações jaxb para jackson. Jackson é adicionado agora a Spring by <mvc:annotation-driven/>. Eu preciso disso por @ResponseBody anotação o objeto é convertido em xml ou json de forma dependente para o tipo de mídia. Eu sou novo em spring-mvc, então não entendo bem como as coisas funcionam. Obrigado.

Respostas:

3 para resposta № 1

Ok, suponho que você queira poder retornar XML e JSON. Para fazer isso, você precisa criar MessageConverters para ambos os formatos.

O conversor de mensagens 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>

O conversor de mensagens JSON, que usa as anotações 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 finalmente, o AnnotationMethodHandlerAdapter, que converterá as respostas para o tipo de conteúdo apropriado, dependendo dos cabeçalhos aceitos:

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

Note que o suporte a JAXB no jackson não está 100% completo ou correto o tempo todo, mas os desenvolvedores são realmente bons em corrigir erros e responder a relatórios de erros.