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

时间:2019-06-10 13:26:29

标签: java spring wildfly java-11 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示例

pre-upgrade date serialization

Wildfly 15示例

post-upgrade date serialization

该字段在MySQL中配置为DATE

enter image description here

示例实体

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,但没有成功

3 个答案:

答案 0 :(得分:3)

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

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

根据文档:

  

时间数据可以具有DATE,TIME或TIMESTAMP精度(即   实际日期,只有时间或两者皆有)。使用@Temporal批注   进行微调。

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

答案 1 :(得分:3)

尽管我不确定您当前的设置/配置,但是如果您配置ObjectMapper,则可能会得到预期的行为:

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

答案 2 :(得分:1)

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

基于@Sofo Gial被接受的answer,以下方法在Spring 5.0.9.RELEASE / JDK 11 / Wildfly 15中为我们工作。

1)创建一个<textarea id="textareaCode">existing text</textarea>

CustomObjectMapper.java

2)在上下文bean配置XML文件中,在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); } } 标签之间添加一个<mvc:message-converters>条目,并创建一个<mvc:annotation-driven>的bean:

CustomObjectMapper