Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Wildfly 11升级到Wildfly 15时出现日期序列化问题_Java_Spring_Wildfly_Java 11_Wildfly 15 - Fatal编程技术网

Java 从Wildfly 11升级到Wildfly 15时出现日期序列化问题

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

我们最近从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 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)谢谢乔治!如果你能对你所做的调整发表评论,我会更新我的答案,也包括这些,以供将来的读者参考。