【问题标题】:Spring Data Rest and java.time serializationSpring Data Rest 和 java.time 序列化
【发布时间】:2017-07-04 16:22:34
【问题描述】:

我有一个没有 Spring Boot 的项目,但它使用了一些 spring 模块,例如“spring data”和“spring data rest”。

我对 java.time.* 字段的序列化有一些问题。 我找到了一些类似 this 的教程,但即使我添加了以下依赖项

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>${jackson.version}</version>
</dependency>

以及我的 RepositoryRestConfigurerAdapter 中的以下代码

@Component public class CvlRepositoryRestConfigurerAdapter extends RepositoryRestConfigurerAdapter {

@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
    config.setDefaultPageSize(75);
    config.setReturnBodyForPutAndPost(Boolean.TRUE);
}

@Override
public void configureJacksonObjectMapper(ObjectMapper objectMapper) {
    super.configureJacksonObjectMapper(objectMapper);
    objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false);
}

}

我对 java.time 字段的实际响应如下

“评分日期”:{ “年份”:2017 年, “月”:“二月”, "dayOfMonth" : 14, "dayOfWeek" : "星期二", “时代”:“CE”, "dayOfYear" : 45, “闰年”:假, “月值”:2, “年表”:{ “id”:“ISO”, “日历类型”:“iso8601” }

我做错了什么?我忘记了什么?

【问题讨论】:

    标签: spring-data


    【解决方案1】:

    这是我的适配器。现在它正在工作

    @Component
    public class CvlRepositoryRestConfigurerAdapter extends RepositoryRestConfigurerAdapter {
    
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.setDefaultPageSize(75);
        config.setReturnBodyForPutAndPost(Boolean.TRUE);
    }
    
    @Override
    public void configureJacksonObjectMapper(ObjectMapper objectMapper) {
        super.configureJacksonObjectMapper(objectMapper);
        objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false);
        SimpleModule sm = new SimpleModule("jsr310module");
        sm.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ISO_DATE));
        sm.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_DATE));
        sm.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ISO_DATE_TIME));
        sm.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_DATE_TIME));
        objectMapper.registerModule(sm);
    }
    

    }

    我只需要检查时区(ZonedDateTime 字段)和编码(似乎是 UTF-8 是默认值),一切都会好起来的。 希望对其他人有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 2016-05-05
      • 1970-01-01
      • 2014-08-06
      • 2018-05-19
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多