反序列化列表会导致重复

时间:2015-05-14 20:04:42

标签: jackson deserialization

我有一个简单的pojo,其中我有一个字符串列表和默认的get / set,我有另一个得到所以在json我得到2个不同的字段 我的pojo和测试代码片段在

之下
  public static class TestClass{
    public ArrayList<String> names = null;

    public ArrayList<String> getNames() {
        if(null == names) names = new ArrayList<>();
        return names;
    }

    public void setNames(ArrayList<String> names) {
        this.names = names;
    }

    public ArrayList<String> getNames_r() {
        return getNames();
    }

    @Override
    public String toString() {
        return "TestClass [names=" + names + "]";
    }

}

@Test
public void testDeSerializationSimple() throws JsonParseException, JsonMappingException, IOException{
    String justSchool = "{\"names\":[\"second\",\"one\",\"two\",\"three\"],\"names_r\":[\"second\",\"one\",\"two\",\"three\"]}";

    ObjectMapper myDefaultMapper= new ObjectMapper();
    myDefaultMapper.setDateFormat(CoreUtils.COMMON_SIMPLE_DATE_FORMAT)
    .setTimeZone(TimeZone.getTimeZone("UTC"))
    .enable(SerializationFeature.INDENT_OUTPUT)
    .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    TestClass testReadDummy = myDefaultMapper.readValue(justSchool, TestClass.class);
    System.out.println(" mapper test read = "+testReadDummy);
    //assertEquals(testRead.getListString().size(),4);
    System.out.println("list = "+testReadDummy);
    assertEquals(testReadDummy.names.size(), 4);
}

2 个答案:

答案 0 :(得分:0)

尝试在列表的副本中使用@JsonIgnore注释,以便它不会被序列化,它看起来像:

@JsonIgnore    
public ArrayList<String> getNames_r() {
    return getNames();
}

那应该摆脱序列化JSON中的重复字段。

希望它有所帮助,

何塞路易斯

答案 1 :(得分:0)

将映射器配置为不使用getter作为setter MAPPER.configure(MapperFeature.USE_GETTERS_AS_SETTERS,false);

解决了这个问题