杰克逊JSON翻译
问题描述:
我正在与第三方WS进行集成,这些WS以不同标准发送日期。 例如邮件正文:杰克逊JSON翻译
{
"date" : "2016-09-12T16:00:00+0000"
}
通过采用以下配置杰克逊能够很好地反序列化到POJO:
public class Pojo {
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssZ")
ZonedDateTime date;
public ZonedDateTime getDate() {
return date;
}
public void setDate(ZonedDateTime date) {
this.date = date;
}
}
我的问题是,我想从一个图形序列化date
,然后将其序列化为一个由我们的系统使用。我明白我可以分解代码中的映射和反序列化,但也许有更清晰的方法?
答
您可以具体使用@JsonDeserialize
和@JsonSerialize
并提供自定义串行器/解串器,它可以扩展StdSerializer
/StdDeserializer
。 serialize
和deserialize
方法必须被覆盖。举个例子:
// Field
@JsonSerialize(using = CustomDateSerializer)
@JsonDeserialize(using = CustomDateDeserializer)
ZonedDateTime date
而且CustomDateSerializer
:
class CustomDateSerializer extends StdSerializer<ZonedDateTime> {
private static DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("dd-MM-yyyy hh:mm:ss")
public CustomDateSerializer(Class<ZonedDateTime> t) {
super(t)
}
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2)
throws IOException, JsonProcessingException {
gen.writeString(formatter.format(value))
}
}
同样,对于deserialization
:
class CustomDateDeserializer extends StdDeserializer<ZonedDateTime> {
private static DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")
public CustomDateDeserializer(Class<?> vc) {
super(vc)
}
@Override
public Date deserialize(JsonParser jsonparser, DeserializationContext context)
throws IOException, JsonProcessingException {
String date = jsonparser.getText()
try {
return ZonedDateTime.parse(formatter, date)
} catch (DateTimeParseException e) {
throw new RuntimeException(e)
}
}
}
我很惊讶,它甚至可以编译,因为它应该是'@JsonFormat( pattern =“yyyy-MM-dd'T'HH:mm:ssZ”)'用双引号 –
@NicolasFilotto它在GROOVY – Xeperis
我想你应该在某处提及它 –