Deserialisieren Sie Java 8 LocalDateTime mit JacksonMapper

Ich habe hier in SO mehrere Fragen mit Antworten zu Serialisierung und Deserialisierung zwischen @ gelesejava.time.LocalDateTime und JSON-Eigenschaft, aber ich kann es scheinbar nicht zum Laufen bringen.

Ich habe es geschafft, meine Spring Boot-Anwendung so zu konfigurieren, dass sie die Daten in dem von mir gewünschten Format zurückgibt YYY-MM-dd HH:mm), aber ich habe Probleme beim Akzeptieren von Werten in diesem Format in JSON.

Dies sind all die Dinge, die ich bisher getan habe:

Added Maven Abhängigkeit fürjsr310:

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

Angegebenjsr310 in meiner Hauptklasse:

@EntityScan(basePackageClasses = { App.class, Jsr310JpaConverters.class })

Deaktivierte Serialisierung als Zeitstempel inapplication.properties:

spring.jackson.serialization.write_dates_as_timestamps=false

Und dies ist meine Entitätszuordnung für datetime:

@Column(name = "start_date")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
@JsonFormat(pattern = "YYYY-MM-dd HH:mm")
private LocalDateTime startDate;

In meiner Datenbank speichere ich dieses Datum als TIMESTAMP im folgenden Format:2016-12-01T23:00:00+00:00.

Wenn ich über meinen Controller auf diese Entität zugreife, wird der JSON mit dem korrekten startDate-Format zurückgegeben. Wenn ich versuche, es zu posten und es zu deserialisieren, benutze ichYYYY-MM-dd HH:mmm @ -Format erhalte ich die folgende Ausnahme:

{
  "timestamp": "2016-10-30T14:22:25.285+0000",
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.http.converter.HttpMessageNotReadableException",
  "message": "Could not read document: Can not deserialize value of type java.time.LocalDateTime from String \"2017-01-01 20:00\": Text '2017-01-01 20:00' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {MonthOfYear=1, WeekBasedYear[WeekFields[SUNDAY,1]]=2017, DayOfMonth=1},ISO resolved to 20:00 of type java.time.format.Parsed\n at [Source: java.io.PushbackInputStream@679a734d; line: 6, column: 16] (through reference chain: com.gigsterous.api.model.Event[\"startDate\"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.time.LocalDateTime from String \"2017-01-01 20:00\": Text '2017-01-01 20:00' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {MonthOfYear=1, WeekBasedYear[WeekFields[SUNDAY,1]]=2017, DayOfMonth=1},ISO resolved to 20:00 of type java.time.format.Parsed\n at [Source: java.io.PushbackInputStream@679a734d; line: 6, column: 16] (through reference chain: com.gigsterous.api.model.Event[\"startDate\"])",
  "path": "/api/events"
}

Ich weiß, dass es viele Antworten zu diesem Thema gibt, aber wenn ich ihnen folge und ein paar Stunden lang versuche, habe ich nicht herausgefunden, was ich falsch mache. Ich würde mich freuen, wenn mir jemand mitteilen könnte, was ich vermisse. Vielen Dank für jede Eingabe dazu!

EDIT: Dies sind alle am Prozess beteiligten Klassen:

Repository

@Repository
public interface EventRepository extends PagingAndSortingRepository<Event, Long> {
}

Regler

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Event> createEvent(@RequestBody Event event) {
        return new ResponseEntity<>(eventRepo.save(event), HttpStatus.CREATED);
}

Meine JSON-Anfrage payalod:

{
  "name": "Test",
  "startDate": "2017-01-01 20:00"
}

Veranstaltung

@Entity
@Table(name = "events")
@Getter
@Setter
public class Event {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "event_id")
    private long id;

    @Column(name = "name")
    private String name;

    @Column(name = "start_date")
    @DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
    @JsonFormat(pattern = "YYYY-MM-dd HH:mm")
    private LocalDateTime startDate;
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage