我使用 Jackson 来处理 JSON,我有一个自定义日期序列化器,用于按照我想要的方式格式化日期,但它不遵守 @JsonSerialize(include = Inclusion.NON_NULL) 注释。序列化器如下。
如果日期为空,它仍然会被写入。如果我不使用自定义序列化程序,一切都很好,不会写入空值。我的问题是,JsonSerializer 类中是否需要执行某些操作来阻止写入空值?
public class DateSerializer extends JsonSerializer<Date>
{
@Override
public final void serialize(Date date, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException
{
SimpleDateFormat sdf = new SimpleDateFormat(MY_FORMAT);
jgen.writeString(sdf.format(date));
}
}
最佳答案
事实证明它根本不是序列化器,而是默认为 include=ALWAYS 的 @JsonSerialize 注释,它覆盖了类上的 include=NON_NULL 。因此更改 getter 的注释是有效的:
更改:
@JsonSerialize(using = DateSerializer.class)
public Date getDate()
{
return date;
}
至:
@JsonSerialize(using = DateSerializer.class,
include=JsonSerialize.Inclusion.NON_NULL)
public Date getDate()
{
return date;
}
关于java - 停止 Jackson 自定义日期序列化器写入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555628/