2017-02-15 100 views
0

我有一个没有Spring Boot的项目,但它使用了一些弹簧模块,比如“spring data”和“spring data rest”。Spring Data Rest和java.time序列化

我对java.time。*字段的序列化有一些问题。 我发现一些教程就像this但即使我加入我的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); 
} 

}

以下依赖

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

和下面的代码我的实际响应关于Java的。时间字段如下

“rateDate”:{ “年”:2017年, “月”: “二月”, “请将dayOfMonth”:14, “一周中的某天”: “星期二”, “时代”: “CE”, “DAYOFYEAR”:45, “leapYear” :假的, “monthValue”:2, “年表”:{ “ID”: “ISO”, “calendarType”: “ISO8601” }

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

回答

0

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

@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是默认值),都将被罚款。 希望对他人有用