如何使用不同的日期格式进行序列化和反序列化?
How do I use different date formats for serialization & deserialization?
我得到一个日期字段格式为 2022-02-11
的对象,我将其映射到一个对象中,如下所示:
{ "dateTimeField": "2022-02-11" }
@Data
class MyPojo {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date dateTimeField;
}
现在我需要将此对象作为 json 响应发送,但我需要它采用不同的格式:
{ "dateTimeField": "2022-02-11 00:00:00" }
如果我更改 pattern
字段,反序列化失败:
@Data
class MyPojo {
// com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2022-02-11": expected format "yyyy-MM-dd HH:mm:ss"
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date dateTimeField;
}
如何使用不同的模式进行序列化和反序列化?
这可以在字段的 getter 和 setter 上使用单独的注释来完成:
@Data
class MyPojo {
private Date dateTimeField;
// Used during serialization
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date getDateTimeField() {
return dateTimeField;
}
// Used during deserialization
@JsonFormat(pattern = "yyyy-MM-dd")
public void setDateTimeField(Date dateTimeField) {
this.dateTimeField = dateTimeField;
}
}
或者,使用 Lombok 的(从 2022 年 2 月 11 日开始试验)onX 功能:
@Data
class MyPojo {
@Getter(onMethod_ = {@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")}) // Used during serialization
@Setter(onMethod_ = {@JsonFormat(pattern = "yyyy-MM-dd")}) // Used during deserialization
private Date dateTimeField;
}
我得到一个日期字段格式为 2022-02-11
的对象,我将其映射到一个对象中,如下所示:
{ "dateTimeField": "2022-02-11" }
@Data
class MyPojo {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date dateTimeField;
}
现在我需要将此对象作为 json 响应发送,但我需要它采用不同的格式:
{ "dateTimeField": "2022-02-11 00:00:00" }
如果我更改 pattern
字段,反序列化失败:
@Data
class MyPojo {
// com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2022-02-11": expected format "yyyy-MM-dd HH:mm:ss"
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date dateTimeField;
}
如何使用不同的模式进行序列化和反序列化?
这可以在字段的 getter 和 setter 上使用单独的注释来完成:
@Data
class MyPojo {
private Date dateTimeField;
// Used during serialization
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date getDateTimeField() {
return dateTimeField;
}
// Used during deserialization
@JsonFormat(pattern = "yyyy-MM-dd")
public void setDateTimeField(Date dateTimeField) {
this.dateTimeField = dateTimeField;
}
}
或者,使用 Lombok 的(从 2022 年 2 月 11 日开始试验)onX 功能:
@Data
class MyPojo {
@Getter(onMethod_ = {@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")}) // Used during serialization
@Setter(onMethod_ = {@JsonFormat(pattern = "yyyy-MM-dd")}) // Used during deserialization
private Date dateTimeField;
}