Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从jackson中排除特定值_Java_Json_Jackson - Fatal编程技术网

Java 从jackson中排除特定值

Java 从jackson中排除特定值,java,json,jackson,Java,Json,Jackson,我正在使用对象映射器,如果某些字段有特定的值,我想对它们进行exluce 假设我有一个如下所示的对象: public static class Data { int id; int value; } 假设这个值很可能是60。为了减少序列化的数据长度,如果值等于60,我希望它们只使用id进行序列化。有没有办法做到这一点 顺便说一句,我尝试使用“ignore null”功能,返回该确切值的null,但不幸的是,这会破坏bean的可重用性您可以为此类编写自定义序列化程序。例如,您的

我正在使用对象映射器,如果某些字段有特定的值,我想对它们进行exluce

假设我有一个如下所示的对象:

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();
    }
}