无法使用Jackson处理JAXB注释

时间:2013-12-19 13:32:42

标签: java rest jaxb jackson

我正在尝试使用restTemplate(Spring)和Jackson 2.3.0构建一个JSON Web服务使用者

问题是像这样的pojo的绑定:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DerniereFactureTest", propOrder = { "montantTTC" })
public class DerniereFactureTest {
  @XmlElement(name = "montant_TTC", required = true)
  protected BigDecimal montantTTC;
  ...<Getter and setter>...
}

杰克逊输出了这个错误:

  

org.springframework.http.converter.HttpMessageNotReadableException:无法读取JSON:无法识别的字段“montant_TTC”(类com.bouygtel.vgc.transverse.composant.ws.DerniereFactureTest),未标记为可忽略(一个已知属性:“ montantTTC“])   (......)   引起:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“montant_TTC”(类com.bouygtel.vgc.transverse.composant.ws.DerniereFactureTest),未标记为可忽略(一个已知属性:“montantTTC”] )

我确切地说我不能改变Pojo注释。

这是我的Spring配置:

<!-- Client REST -->
<bean class="org.springframework.web.client.RestTemplate" />

<!-- JAX-B: mapper JSON<->DTO -->
<bean
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="objectMapper" ref="jacksonObjectMapper" />
</bean>

<bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
    <property name="annotationIntrospector" ref="jaxbAnnotationInspector" />
</bean>

<bean id="jaxbAnnotationInspector"
    class="com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector" />

调试时,我看起来没有使用JaxbAnnotationIntrospector(而是使用JacksonAnnotationIntrospector)。

任何让杰克逊使用JaxB注释的方法吗?

感谢您的建议。

1 个答案:

答案 0 :(得分:1)

我终于用Spring Spring解决了自己的问题:

    <!-- le client REST -->
<bean class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json" />
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="annotationIntrospector">
                            <bean
                                class="com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector" />
                        </property>
                    </bean>
                </property>
            </bean>
        </list>
    </property>
</bean>