Cannot deserialize value of type `java.time.localdatetime` from string

Explanation:

When receiving data from an API or other external sources, it is common to convert the received data into Java objects using a process called deserialization. However, deserialization may fail if there is a mismatch between the data type expected by Java and the data type received.

In the case of the error message “cannot deserialize value of type `java.time.localdatetime` from string”, it means that the code is trying to convert a string value into a LocalDateTime object, but the conversion is failing.

LocalDateTime is a class in the java.time package introduced in Java 8, representing a date and time without a timezone. It does not have a default deserialization format, so you need to specify a suitable format for deserialization.

Example:

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ExampleClass {
  @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
  private LocalDateTime exampleDateTime;

  public LocalDateTime getExampleDateTime() {
    return exampleDateTime;
  }

  public void setExampleDateTime(LocalDateTime exampleDateTime) {
    this.exampleDateTime = exampleDateTime;
  }

  public static void main(String[] args) throws Exception {
    String json = "{\"exampleDateTime\":\"2022-01-01T12:00:00.000Z\"}";

    ObjectMapper mapper = new ObjectMapper();
    ExampleClass exampleObj = mapper.readValue(json, ExampleClass.class);

    System.out.println(exampleObj.getExampleDateTime());
  }
}
    

In the above example, we are using the Jackson library (fasterxml.jackson package) to perform the deserialization. The @JsonFormat annotation is used to specify the expected format of the date-time string. In this case, “yyyy-MM-dd’T’HH:mm:ss.SSS’Z'” represents the ISO 8601 format with milliseconds and the “Z” denotes the time is in UTC.

By specifying the appropriate date-time format and using the @JsonFormat annotation, the error “cannot deserialize value of type `java.time.localdatetime` from string” can be resolved.

Read more

Leave a comment