Bill
Bill

Reputation: 53

Spring Jackson java.time Deserialization: arguments mismatched

How do I deserialize Java 8 time API classes?

Here's what I've done:

Included dependency: compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")

Request body to be deserialized into:

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.joda.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;

public class TestRequest {
    @JsonSerialize(using = LocalDateSerializer.class)
    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "YYYY-MM-dd")
    LocalDate localDate;
}

Spring Controller:

public ResponseEntity test(@RequestBody TestRequest testRequest) {
    return ResponseEntity.ok(testRequest);
}

JSON Request Body:

{ "localDate": "2017-11-01" }

The Exception:

com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of TestRequest, problem: argument type mismatch

Upvotes: 2

Views: 586

Answers (1)

Denis Ismailovski
Denis Ismailovski

Reputation: 321

you should use jackson-modules-java8 instead of jackson-datatype-jsr310 to serialize or deserialize java 8 classes.

Upvotes: 1

Related Questions