杰克逊反序列化 LocalDateTime
Jackson deserialize LocalDateTime
我有一个如下所示的时间字段值:
2020-10-01T15:30:27.4394205+03:00
我不知道如何表示为日期格式。
我需要将它反序列化为 LocalDateTime 字段。
我试过这样;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime timestamp;
但它不起作用。我怎样才能反序列化它?
顺便说一句,我正在使用 spring 启动。并且此值将保留在控制器请求正文中。
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX")
private LocalDateTime timestamp;
为其编写自定义反序列化器:
@Log4j2
public class CustomLocalDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
public CustomLocalDateTimeDeserializer() {
this(null);
}
private CustomLocalDateTimeDeserializer(Class<LocalDateTime> t) {
super(t);
}
@Override
public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String date = jsonParser.getText();
try {
return LocalDateTime.parse(date);
} catch (Exception ex) {
log.debug("Error while parsing date: {} ", date, ex);
throw new RuntimeException("Cannot Parse Date");
}
}
}
现在,使用解串器:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
private LocalDateTime timestamp;
同样,如果你需要序列化,也写一个自定义的序列化器。
将模式替换为pattern = DateTimeFormatter.ISO_OFFSET_DATE_TIME
您的 date-time 字符串已采用 DateTimeFormatter.ISO_OFFSET_DATE_TIME
which is the default format used by OffsetDateTime#parse
指定的格式。
演示:
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
public class Main {
public static void main(String[] args) {
String dateTimeStr = "2020-10-01T15:30:27.4394205+03:00";
// Parse the date-time string into OffsetDateTime
OffsetDateTime odt = OffsetDateTime.parse(dateTimeStr);
System.out.println(odt);
// LocalDateTime from OffsetDateTime
LocalDateTime ldt = odt.toLocalDateTime();
System.out.println(ldt);
}
}
输出:
2020-10-01T15:30:27.439420500+03:00
2020-10-01T15:30:27.439420500
我有一个如下所示的时间字段值:
2020-10-01T15:30:27.4394205+03:00
我不知道如何表示为日期格式。
我需要将它反序列化为 LocalDateTime 字段。
我试过这样;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime timestamp;
但它不起作用。我怎样才能反序列化它? 顺便说一句,我正在使用 spring 启动。并且此值将保留在控制器请求正文中。
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX")
private LocalDateTime timestamp;
为其编写自定义反序列化器:
@Log4j2
public class CustomLocalDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
public CustomLocalDateTimeDeserializer() {
this(null);
}
private CustomLocalDateTimeDeserializer(Class<LocalDateTime> t) {
super(t);
}
@Override
public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String date = jsonParser.getText();
try {
return LocalDateTime.parse(date);
} catch (Exception ex) {
log.debug("Error while parsing date: {} ", date, ex);
throw new RuntimeException("Cannot Parse Date");
}
}
}
现在,使用解串器:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
private LocalDateTime timestamp;
同样,如果你需要序列化,也写一个自定义的序列化器。
将模式替换为pattern = DateTimeFormatter.ISO_OFFSET_DATE_TIME
您的 date-time 字符串已采用 DateTimeFormatter.ISO_OFFSET_DATE_TIME
which is the default format used by OffsetDateTime#parse
指定的格式。
演示:
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
public class Main {
public static void main(String[] args) {
String dateTimeStr = "2020-10-01T15:30:27.4394205+03:00";
// Parse the date-time string into OffsetDateTime
OffsetDateTime odt = OffsetDateTime.parse(dateTimeStr);
System.out.println(odt);
// LocalDateTime from OffsetDateTime
LocalDateTime ldt = odt.toLocalDateTime();
System.out.println(ldt);
}
}
输出:
2020-10-01T15:30:27.439420500+03:00
2020-10-01T15:30:27.439420500