在杰克逊中使用自定义反序列化器
您可以从长到字符串或日期通过使用自定义解串器.此自定义反序列化器会将 json 中的 long 值转换为定义的日期格式(日期或字符串)。
在这里,我将纪元值转换为日期形式的字符串。
您需要使用以下需要自定义反序列化的注释。
@JsonDeserialize(using = CustomDateSerializer.class)
请在下面找到代码:
插件.java
public class Plugins {
private String id;
private String name;
@JsonDeserialize(using = CustomDateSerializer.class)
@JsonProperty("created_at")
private String createdAt;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
@Override
public String toString() {
return "Plugins{" +
"id='" + id + ''' +
", name='" + name + ''' +
", createdAt=" + createdAt +
'}';
}
}
CustomDateSerializer.java
public class CustomDateSerializer extends StdDeserializer<String> {
public static String pattern = "dd MMM yyyy hh:mm:ss";
public CustomDateSerializer() {
this(StdDeserializer.class);
}
protected CustomDateSerializer(Class<?> c) {
super(c);
}
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.format(new Date(jsonParser.getLongValue()));
}
}
测试.java
public class Test {
public static void main(String[] args) throws JsonProcessingException {
String json = """
{
"id":"1",
"name":"test",
"created_at":1665158083000
}
""";
ObjectMapper mapper = new ObjectMapper();
Plugins test = mapper.readValue(json,Plugins.class);
System.out.println(test);
}
}
输出:
Plugins{id='1', name='test', createdAt=07 Oct 2022 09:24:43}