gpt4 book ai didi

java - FasterXml:过​​滤器集合

转载 作者:行者123 更新时间:2023-12-02 06:09:27 28 4
gpt4 key购买 nike

问题如何指示ObjectMapper他应该通过某些条件(字段)过滤对象的嵌套集合。通过代码查看解释:

通过代码进行解释:

我必须将 Container 对象转换为 JSON。但我想根据 Entry.value 字段过滤 entries 集合。我的意思是我想序列化 Container 并仅包含 value == 1 的条目。

public class Container {  
List<Entry> entries;

public void setEntries(List<Entry> entries) {
this.entries = entries;
}
}

public class Entry {
int value;

public Entry(int value) {
this.value = value;
}
}


public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
Container container = new Container();
container.setEntries(new LinkedList<Entry>({
{
add(new Entry(1));
add(new Entry(2));
add(new Entry(1));
}
}))
// Now I want to get container object only with two elements in list
mapper.writeValueAsString(container);
}

最佳答案

您可以制作Entry实现JsonSerializable 。在 Jackson 2.x 中它将给出:

public class Entry
implements JsonSerializable
{
int value;

public Entry(int value)
{
this.value = value;
}

@Override
public void serialize(final JsonGenerator jgen,
final SerializerProvider provider)
throws IOException
{
// Don't do anything if value is not 1...
if (value != 1)
return;

jgen.writeStartObject();
jgen.writeNumberField("value", 1);
jgen.writeEndObject();
}

@Override
public void serializeWithType(final JsonGenerator jgen,
final SerializerProvider provider, final TypeSerializer typeSer)
throws IOException
{
serialize(jgen, provider);
}
}

另一个解决方案是实现自定义 JsonSerializer<Entry>并在序列化之前注册它;它基本上会做与上面相同的事情。

关于java - FasterXml:过​​滤器集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22014374/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com