基本上,最简单的方法是在不改变渐近运行时的情况下使这个测试通过(即,请不要告诉我将set1
和set2
复制到列表中,因为整个点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());
}
答案 0 :(得分:0)
显然,解决方案是使用ObjectMapper
配置GuavaModule
:
ObjectMapper mapper = new ObjectMapper().registerModule(new GuavaModule());
我认为这是相关问题/修复:https://github.com/FasterXML/jackson-datatype-guava/issues/46