Java 从jackson中排除特定值
我正在使用对象映射器,如果某些字段有特定的值,我想对它们进行exluce 假设我有一个如下所示的对象:Java 从jackson中排除特定值,java,json,jackson,Java,Json,Jackson,我正在使用对象映射器,如果某些字段有特定的值,我想对它们进行exluce 假设我有一个如下所示的对象: public static class Data { int id; int value; } 假设这个值很可能是60。为了减少序列化的数据长度,如果值等于60,我希望它们只使用id进行序列化。有没有办法做到这一点 顺便说一句,我尝试使用“ignore null”功能,返回该确切值的null,但不幸的是,这会破坏bean的可重用性您可以为此类编写自定义序列化程序。例如,您的
public static class Data
{
int id;
int value;
}
假设这个值很可能是60。为了减少序列化的数据长度,如果值等于60,我希望它们只使用id进行序列化。有没有办法做到这一点
顺便说一句,我尝试使用“ignore null”功能,返回该确切值的null,但不幸的是,这会破坏bean的可重用性您可以为此类编写自定义序列化程序。例如,您的类可以如下所示:
@JsonSerialize(using = DataJsonSerializer.class)
class Data {
public static final int DEFAULT_VALUE = 60;
private int id;
private int value = DEFAULT_VALUE;
//getters, setters, toString, other
}
class DataJsonSerializer extends JsonSerializer<Data> {
@Override
public void serialize(Data value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeFieldName("id");
jgen.writeNumber(value.getId());
if (value.getValue() != Data.DEFAULT_VALUE) {
jgen.writeFieldName("value");
jgen.writeNumber(value.getValue());
}
jgen.writeEndObject();
}
}
序列化程序实现可能如下所示:
@JsonSerialize(using = DataJsonSerializer.class)
class Data {
public static final int DEFAULT_VALUE = 60;
private int id;
private int value = DEFAULT_VALUE;
//getters, setters, toString, other
}
class DataJsonSerializer extends JsonSerializer<Data> {
@Override
public void serialize(Data value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeFieldName("id");
jgen.writeNumber(value.getId());
if (value.getValue() != Data.DEFAULT_VALUE) {
jgen.writeFieldName("value");
jgen.writeNumber(value.getValue());
}
jgen.writeEndObject();
}
}