在Jackson中,如何将非Map Iterable序列化为数组?

时间:2016-02-24 01:52:29

标签: java json jackson

基本上,最简单的方法是在不改变渐近运行时的情况下使这个测试通过(即,请不要告诉我将set1set2复制到列表中,因为整个点Iterables.concat()是为了避免副本):

@Test
public void jacksonObjectMapperSerializesIterableAsList() throws IOException {
  SortedSet<String> set1 = new TreeSet<>();
  set1.add("a");
  set1.add("b");
  set1.add("c");
  SortedSet<String> set2 = new TreeSet<>();
  set2.add("d");
  set2.add("e");
  set2.add("f");

  ObjectMapper mapper = new ObjectMapper();

  // This part passes.
  StringWriter set1Writer = new StringWriter();
  mapper.writeValue(set1Writer, set1);
  assertEquals("[\"a\",\"b\",\"c\"]", set1Writer.toString());

  // This part fails.
  // The actual value is: {"empty":false}
  StringWriter setsWriter = new StringWriter();
  mapper.writeValue(setsWriter, com.google.common.collect.Iterables.concat(set1, set2));
  assertEquals("[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"]", setsWriter.toString());
}

1 个答案:

答案 0 :(得分:0)

显然,解决方案是使用ObjectMapper配置GuavaModule

ObjectMapper mapper = new ObjectMapper().registerModule(new GuavaModule());

我认为这是相关问题/修复:https://github.com/FasterXML/jackson-datatype-guava/issues/46