反序列化列表会导致重复

Deserializing a list results in duplicates

我有一个简单的 pojo,其中有一个字符串列表和默认值 get/set,我有另一个 get,所以在 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);
}

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

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

这应该会删除序列化后的重复字段 JSON。

希望对您有所帮助,

何塞·路易斯

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

解决了这个问题