Reputation: 53
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
Reputation: 321
you should use jackson-modules-java8 instead of jackson-datatype-jsr310 to serialize or deserialize java 8 classes.
Upvotes: 1