Json Jackson序列化配置

Json Jackson序列化配置,json,spring,jackson,Json,Spring,Jackson,我正在Spring3MVC应用程序中使用JacksonJSON。为了不序列化每个日期字段,我创建了一个使用特定日期格式的自定义objectmapper: @Component("jacksonObjectMapper") public class CustomObjectMapper extends ObjectMapper { Logger log = Logger.getLogger(CustomObjectMapper.class); @PostConstruct

我正在Spring3MVC应用程序中使用JacksonJSON。为了不序列化每个日期字段,我创建了一个使用特定日期格式的自定义objectmapper:

@Component("jacksonObjectMapper")
public class CustomObjectMapper extends ObjectMapper
{
    Logger log = Logger.getLogger(CustomObjectMapper.class);

    @PostConstruct
    public void afterProps()
    {
        log.info("PostConstruct... RUNNING");
        //ISO 8601
        getSerializationConfig().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SZ"));


    }

    //constructors...

}
此自定义ObjectMapper被注入JsonConverter:

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="supportedMediaTypes" value="application/json" />
    <property name="objectMapper" ref="jacksonObjectMapper" /> <!-- defined in CustomObjectMapper -->
</bean>

日志和序列化工作中没有例外,但它没有选择dateformat,而是简单地序列化为时间戳。@PostConstruct注释起作用,方法中的log语句位于日志中


有人知道这失败的原因吗?

您可能还需要通过执行以下操作来指定要进行文本日期序列化:

configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
(虽然我假设设置非空日期格式也可能触发它,但可能不会)


此外,您还可以直接从构造函数配置映射器(这是安全的)。并不是说它应该改变行为,而是可以消除对单独配置方法的需要。

我已经完成了下面的工作,以解决与Java/PHP时间戳的兼容性问题。Java使用毫秒,而PHP使用秒,所以使用ISO日期更简单

我声明以下消息适配器:

<bean id="messageAdapter"
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean id="jacksonJsonMessageConvertor"
                class="my.app.MyMappingJacksonHttpMessageConverter"/>                   
        </list>
    </property>
</bean>

以上所有日期均以ISO格式书写。

抱歉,所有这些似乎都没有帮助。很奇怪。我仍然看到打印出来的日期是一个时间戳;听起来可能是您没有配置正在使用的ObjectMapper,或者Jackson没有用于序列化。这个问题解决了吗?@Sven Haiged我没有指出json是受支持的媒体类型,但是hwen I debug it json包含在受支持的媒体类型中,并且运行良好。我错过什么了吗?
public class MyMappingJacksonHttpMessageConverter extends MappingJacksonHttpMessageConverter {

public MyMappingJacksonHttpMessageConverter(){
    super();
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false);
    setObjectMapper(objectMapper);
}
}