杰克逊 - 全球知名度不起作用

时间:2015-09-15 18:39:09

标签: java json spring jackson

我正在尝试将Spring Web应用程序中的getters和setter的可见性全局设置为我的自定义对象映射器。这是映射器:

public class FieldsObjectMapper extends ObjectMapper {
    public FieldsObjectMapper() {
        super();

        setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
        setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
    }
}

这是Spring XML配置:

<bean id="objectMapper"
      class="com.app.FieldsObjectMapper"/>

<bean id="jsonMessageConverter"
      class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="objectMapper" ref="objectMapper"/>
</bean>

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters" ref="jsonMessageConverter"/>
</bean>

我想要实现的是 JSON反序列化,仅基于my @JsonProperty注释上面的字段,而不是setter或getter。

这是我的POJO:

public class OrderRequest {
      ...

    @JsonProperty(value = "expiration")
    @JsonDeserialize(using = JsonLocalDateTimeDeserializer.class)
    private LocalDateTime _expiration;

    public LocalDateTime getExpiration() {
        return _expiration;
    }

    public void setExpiration(LocalDateTime expiration) {
        _expiration = expiration;
    }

      ...
}

使用此设置进行反序列化无法正常工作,尝试反序列化LocalDateTime时会抛出异常,因为使用的是默认的LocalDateTimeDeserializer,而不是我的带注释的JsonLocalDateTimeDeserializer

如果我把这个注释

@JsonAutoDetect(
    setterVisibility = JsonAutoDetect.Visibility.NONE,
    getterVisibility = JsonAutoDetect.Visibility.NONE)
OrderRequest类本地上方的

一切正常,JSON被反序列化到对象正确

我是否设置错误或其他地方有回调?

提前感谢您的帮助。

P.S。:我使用Jackson 2.6.0 和Spring 4.2

0 个答案:

没有答案