首页 文章

使用Spring Data Couchbase的OffsetDateTime

提问于
浏览
1

我正在使用Spring Data Couchbase创建一个POC,并在新的Java 8 DateTime库中遇到一个小问题 . 我希望我的内容可以保存并使用ISO-8601日期阅读 . 我正在使用OffsetDateTime来捕获带有时区偏移的完整时间戳 . 保存文档时,我没有任何问题 . 但是,当从DB读取它时,我收到映射异常 . 我正在使用JSR-310依赖项来配置jackson解析 .

使用OffsetDateTime是正确的方法吗?我应该退回并使用Joda DateTime吗?

POM依赖:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-couchbase</artifactId>
    <version>2.1.1.RELEASE</version>
 </dependency>

 <dependency>
     <groupId>com.fasterxml.jackson.datatype</groupId>
     <artifactId>jackson-datatype-jsr310</artifactId>
     <version>2.6.1</version>
 </dependency>

文档Java类:

@Document
public class Content {

    @Id
    private Long id;

    @CreatedDate
    private OffsetDateTime createdDate;
...
}

应用YML:

spring:
  jackson:
    deserialization:
      adjust_dates_to_context_time_zone: false
    serialization:
      write_dates_as_timestamps: false
    date-format: yyyy-MM-dd'T'HH:mm:ss.SSSZ

保存(无问题):

{
    ...
    "createdDate": "2016-06-14T15:25:27.746-04:00",
    ...
}

On Read(例外):

{
  "timestamp": "2016-06-14T19:26:08.290+0000",
  "status": 500,
  "error": "Internal Server Error",
  "exception": "org.springframework.data.mapping.model.MappingException",
  "message": "No property null found on entity class java.time.OffsetDateTime to bind constructor parameter to!",
  "path": "/v1/content/a7d078f1-a0d5-4ec1-89f5-149d850aa372"
}

1 回答

  • 2

    目前不支持OffsetDateTime和ZoneDateTime . 作为一种解决方法,您可以使用Joda DateTime以及以下配置 .

    POM依赖:

    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-couchbase</artifactId>
      <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-joda</artifactId>
      <version>2.7.4</version>
    </dependency>
    

    文档Java类:

    @Document
    public class Content {
    
        @Id
        private Long id;
    
        @CreatedDate
        private DateTime createdDate;
    ...
    }
    

    应用YML:

    spring:
      jackson:
        deserialization:
          adjust_dates_to_context_time_zone: false
        serialization:
          write_dates_as_timestamps: false
        date-format: yyyy-MM-dd'T'HH:mm:ss.SSSZ
    

    保存:

    {
        ...
        "createdDate": "2016-06-14T21:55:23.258+0000",
        ...
    }
    

    阅读:

    {
        ...
        "createdDate": "2016-06-14T21:55:23.258+0000",
        ...
    }
    

相关问题