2016-06-14 12 views
1

Ich erstelle eine POC mit Spring Data Couchbase und läuft in ein kleines Problem mit den neuen Java 8 DateTime-Bibliotheken. Ich möchte, dass meine Inhalte mit ISO-8601-Daten gespeichert und gelesen werden. Ich verwende OffsetDateTime, um den vollständigen Zeitstempel mit Zeitzonenversatz zu erfassen. Beim Speichern eines Dokuments habe ich keine Probleme. Beim Lesen von der DB erhalte ich jedoch eine Mapping-Ausnahme. Ich verwende die JSR-310-Abhängigkeit, um auch das jackson-Parsing zu konfigurieren.OffsetDateTime mit Spring Data Couchbase

Ist OffsetDateTime der richtige Ansatz? Soll ich zurückfallen und einfach Joda DateTime benutzen?

POM Abhängigkeiten:

<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> 

Dokument Java-Klasse:

@Document 
public class Content { 

    @Id 
    private Long id; 

    @CreatedDate 
    private OffsetDateTime createdDate; 
... 
} 

Anwendung 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 

Auf Save (Keine Ausgabe):

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

On Read (Exception):

{ 
    "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" 
} 

Antwort

2

Sieht aus wie OffsetDateTime und ZoneDateTime sind zu diesem Zeitpunkt nicht unterstützt. Als Workaround können Sie Joda DateTime mit den folgenden Konfigurationen verwenden.

POM Abhängigkeiten:

<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> 

Dokument Java-Klasse:

@Document 
public class Content { 

    @Id 
    private Long id; 

    @CreatedDate 
    private DateTime createdDate; 
... 
} 

Anwendung 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 

Auf sparen

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

Ein Lesen:

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