Java 从Wildfly 11升级到Wildfly 15时出现日期序列化问题
我们最近从Wildfly 11迁移到Wildfly 15,从Java 8迁移到Java 11,并注意到Jackson序列化日期对象的方式发生了变化。我们使用Jackson v2.9.8进行对象序列化,使用Spring v5.0.9 在升级之前,日期对象将以ISO格式序列化,例如“2019-11-12”,但在升级之后,日期字段开始显示为时间戳,例如“157351680000”。以前有人遇到过这个问题吗?这是可以在Java 从Wildfly 11升级到Wildfly 15时出现日期序列化问题,java,spring,wildfly,java-11,wildfly-15,Java,Spring,Wildfly,Java 11,Wildfly 15,我们最近从Wildfly 11迁移到Wildfly 15,从Java 8迁移到Java 11,并注意到Jackson序列化日期对象的方式发生了变化。我们使用Jackson v2.9.8进行对象序列化,使用Spring v5.0.9 在升级之前,日期对象将以ISO格式序列化,例如“2019-11-12”,但在升级之后,日期字段开始显示为时间戳,例如“157351680000”。以前有人遇到过这个问题吗?这是可以在standalone.xml中配置的吗 Wildfly 11示例 Wildfly 1
standalone.xml
中配置的吗
Wildfly 11示例
Wildfly 15示例
该字段在MySQL中配置为日期
示例实体
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.Date
和java.util.Calendar
的持久字段或属性指定此批注。只能为这些类型的字段或属性指定此批注
根据文件:
时态数据可以具有日期、时间或时间戳精度(即
实际日期,只有时间,或两者都有)。使用@Temporal注释
微调
然后,您的Rest库将处理Java Date和ISO之间的转换。如何配置取决于您正在使用的JSON序列化程序,它是Jackson中日期的默认格式虽然我无法确定您当前的设置/配置,但如果您配置
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之后,我们遇到了这个问题 基于已被接受的,下面的方法适用于我们使用Spring5.0.9.RELEASE/JDK11/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文件中,在
标记之间添加
条目,并创建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" />
...
...
感谢您的回复,我们已尝试将日期类型更改为java.util.date
,但这并没有解决我们所面临的奇怪问题。我们还尝试添加@Temporal注释,但再次无效。好的……尝试在字段上方添加此注释,以防wildfly使用Jackson@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“yyyy-MM-dd'HH:MM:ss.SSS'Z',timezone=“GMT”)
您是否尝试过使用@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“yyy-MM-dd-HH:MM-a Z”等所需格式对变量进行注释?(由于我们没有使用Spring Boot,所以使用了一些mods)谢谢乔治!如果你能对你所做的调整发表评论,我会更新我的答案,也包括这些,以供将来的读者参考。