java - 停止 Jackson 自定义日期序列化器写入空值

标签 java json jackson

我使用 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/

相关文章:

Java反射适当性

java - 如何区分空值字段和 jackson 库中不存在的字段

java - 自定义MonetaryAmount JSR354/mo​​neta的Databind Json序列化格式

java - 在 Eclipse (java) 中运行到下一个断点

java - 什么时候应该调用 Transaction.delistResource()?

Java 编译器无法识别静态内部类

javascript - 如何将复杂的嵌套 json 映射到 jquery 自动完成格式?

c# - 日期转换: From LINQ to JSON to Javascript

java 。 org.json 问题

json - 强制 jackson 映射器始终在 writeValue 上添加类类型而无需注释