2016-03-22 1 views
0
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); 

Frage:Wie Karte behalten Nullwerte in der jackson mit

objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, true); 

a) Wenn ich obige Aussage und führt verwenden, ist es unter Ausnahme ist zu werfen.

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) Wenn ich die obige Aussage und führt zu verwenden, es funktioniert gut, aber Ergebnis ist wie unten,

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

Aber Key2 aus der json entfernt. So, wie man Nullwerte behält?

objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, true); 

c) Wenn i obige Aussage usethe und führt mit Jackson-databind.jar (Version 2.7) Es arbeitet und auch Nullwerte beibehalten. Aber jackson-databind Version 2.7 unterstützt jdk 7 weiter.So wie kann ich dasselbe in jdk 6 Version verwenden?

Lassen Sie mich andere Alternativen kennen, um es zu überwinden.

+0

Haben Sie versucht, einen benutzerdefinierten Serializer zu schreiben? – VinayVeluri

Antwort

0

Ich verifiziert in jackson-databind.jar (Version 2.7.2) mit jdk 6 und funktioniert gut.