我正在尝试使用 Spring Boot v1.2.0.BUILD-SNAPSHOT 将 Joda DateTime 属性序列化为 ISO-8601
这是我非常简单的 REST 应用程序。
@RestController
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
class Info{
private DateTime dateTime;
public Info(){
dateTime = new DateTime();
}
public DateTime getDateTime() {
return dateTime;
}
public void setDateTime(DateTime dateTime) {
this.dateTime = dateTime;
}
}
@RequestMapping("/info")
Info info() {
return new Info();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Module getModule(){
return new JodaModule();
}
}
dateTime 被序列化为时间戳,例如
{"dateTime":1415954873412}
我试过添加@Bean
@Primary
public ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
false);
return objectMapper;
}
但这也无济于事。那么如何在 Spring Boot 中配置 Jackson 以使用 ISO-8601 格式进行序列化呢?
顺便说一句:我只在 Gradle 构建中添加了以下依赖项
compile("joda-time:joda-time:2.4")
compile("org.jadira.usertype:usertype.jodatime:2.0.1")
compile("com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.2");
最佳答案
由于您使用的是 Spring Boot 1.2,您应该能够简单地将以下内容添加到您的 application.properties
中。文件:
spring.jackson.serialization.write_dates_as_timestamps=false
这将给出以下形式的输出:
{
"dateTime": "2014-11-18T19:01:38.352Z"
}
如果您需要自定义格式,您可以配置
JodaModule
直接,例如删除时间部分:@Bean
public JodaModule jacksonJodaModule() {
JodaModule module = new JodaModule();
DateTimeFormatterFactory formatterFactory = new DateTimeFormatterFactory();
formatterFactory.setIso(ISO.DATE);
module.addSerializer(DateTime.class, new DateTimeSerializer(
new JacksonJodaFormat(formatterFactory.createDateTimeFormatter()
.withZoneUTC())));
return module;
}
关于datetime - spring boot Joda DateTime 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26926289/