反序列化列表会导致重复
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, 假);
解决了这个问题
我有一个简单的 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, 假);
解决了这个问题