datetime - spring boot Joda DateTime 序列化

标签 datetime jackson jodatime spring-boot iso8601

我正在尝试使用 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/

相关文章:

java - hibernate 和 jackson (java.lang.IllegalStateException : Cannot call sendError() after the response has been committed)

java - 从 JodaTime 获取友好、口语化的字符串

java - joda 时区 id 与 java 时区 id 相同吗?

javascript - 为什么在计划开始新的一个月后月份开始增加?

c# - 将日期时间转换为 yyyy-MM-ddT00 :00:00

java - GlassFish JAX-RS Jackson 自定义 JSON 序列化

java - 使用 Jackson 反序列化包含 2 个具有相同子对象的对象的数组?

json - 在Grails中编码Joda LocalTime

sql - 从 MySQL 中的日、月、年字段创建日期

java - 我需要帮助在 Java 的 MySQL DateTime 范围内进行选择