如何在jackson中保留具有空值的映射

时间:2016-03-22 08:36:57

标签: json jackson

HashMap testMap = new HashMap();
testMap.put("Key1", "Value1");
testMap.put("Key2", null);  

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enableDefaultTyping(); 
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.WRAPPER_OBJECT);          
objectMapper.setVisibility(PropertyAccessor.SETTER,JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.GETTER,JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.FIELD,JsonAutoDetect.Visibility.ANY);
objectMapper.setVisibility(PropertyAccessor.IS_GETTER,JsonAutoDetect.Visibility.NONE);          
//objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, true);

String jsonString = objectMapper.writeValueAsString(testMap);
System.out.println(jsonString);

问题:

objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, true);

a)当我使用上述语句并执行时,它会抛出异常。

java.lang.UnsupportedOperationException: Type id handling not implemented for type java.lang.Object
    at com.fasterxml.jackson.databind.JsonSerializer.serializeWithType(JsonSerializer.java:142)
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeTypedFields(MapSerializer.java:798)

objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);

b)当我使用上述声明并执行时,它工作正常,但结果如下,

{"java.util.HashMap":{"Key1":"Value1"}}

但是从json中删除了Key2。那么如何保留空值?

objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, true);

c)当我使用上述语句并使用jackson-databind.jar(版本2.7)执行时 它也可以工作并保留空值。 但是jackson-databind版本2.7支持jdk 7开始。所以我如何在jdk 6版本中使用相同的东西?

让我知道任何其他替代方法来克服它。

1 个答案:

答案 0 :(得分:0)

我使用jdk 6验证了jackson-databind.jar(版本2.7.2)并且正常工作。