繁体   English   中英

从Wildfly 11升级到Wildfly 15时的日期序列化问题

[英]Date serialization issue while upgrading from Wildfly 11 to Wildfly 15

我们最近从Wildfly 11迁移到Wildfly 15,从Java 8迁移到Java 11,并注意到Jackson如何序列化Date对象的变化。 我们使用Jackson v2.9.8进行对象序列化和Spring v5.0.9。

在我们升级之前,日期对象将以ISO格式(例如“2019-11-12”)序列化,但在升级之后,日期字段开始显示为时间戳,例如“1573516800000”。是否有其他人在此之前遇到此问题?是这个可以在standalone.xml配置的东西?

Wildfly 11例子

升级前日期序列化

Wildfly 15例子

升级后日期序列化

该字段在MySQL中配置为DATE

在此输入图像描述

示例实体

public class Entity implements java.io.Serializable {

  @Id
  @Column(name = "id")
  private Integer id;

  @Column(name = "value_date")
  private java.sql.Date valueDate;

  public java.sql.Date getValueDate() {
    return valueDate;
  }

  public void setValueDate(java.sql.Date valueDate) {
    this.valueDate = valueDate;
  }
}

编辑:

  • 我们已经尝试将java.sql.Date更改为java.util.Date ,但是没有用

我不知道它为什么会这样,但我会将字段的类型更改为java.util.Date ,然后使用@Temporal注释。

必须为持久字段或java.util.Datejava.util.Calendar类型的属性指定此批注。 它只能为这些类型的字段或属性指定。

根据文件:

时态数据可以具有DATE,TIME或TIMESTAMP精度(即实际日期,仅时间或两者)。 使用@Temporal注释来微调它。

然后,您的Rest库将处理Java Date和ISO之间的转换。 如何配置取决于您使用的JSON序列化程序,它是Date in Jackson的默认格式

虽然我无法确定您当前的setup / config,但是如果配置了ObjectMapper ,您可能会得到预期的行为:

@Bean
@Primary
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
    ObjectMapper objectMapper = builder.build();
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    return objectMapper;
}

将Wildfly应用程序服务器从11升级到15,将Java从8升级到11,我们遇到了这个问题。

基于@Sofo Gial的接受答案 ,以下方法适用于我们使用Spring 5.0.9.RELEASE / JDK 11 / Wildfly 15。

1)创建一个CustomObjectMapper.java

package com.mobizio.rest.spring;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

public class CustomObjectMapper extends ObjectMapper {

    public CustomObjectMapper() {
        super();
        configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    }

}

2)在上下文bean配置XML文件中,在<mvc:annotation-driven>标记之间添加<mvc:message-converters>条目,并创建CustomObjectMapper的bean:

<mvc:annotation-driven>
...
<mvc:message-converters>
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="objectMapper" ref="jacksonObjectMapper" />
    </bean>
</mvc:message-converters>
...
</mvc:annotation-driven>

<bean id="jacksonObjectMapper" class="com.mobizio.rest.spring.CustomObjectMapper" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM