首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FasterXml:过滤器集合

FasterXml:过滤器集合
EN

Stack Overflow用户
提问于 2014-02-25 12:34:04
回答 1查看 361关注 0票数 0

如何指示ObjectMapper,他应该通过一些标准(字段)过滤对象的嵌套集合。请参阅代码说明:

代码解释:

我必须将Container对象转换为JSON。但是我想过滤基于entries字段的Entry.value集合。我的意思是我想序列化Container,并且只包括那些value == 1条目。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-25 12:48:00

您可以让Entry实现JsonSerializable。在Jackson 2.x中,它将提供:

代码语言:javascript
复制
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>并注册它;它基本上与上面的相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22014374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档