Skip to content

Commit 848f61a

Browse files
committed
Merge pull request #1229 from ejsolberg/anySetterNullValue
Update SettableAnyProperty to use ValueDeserializer's NullValue
2 parents cb67177 + 3ca6ee9 commit 848f61a

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/SettableAnyProperty.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOE
130130
{
131131
JsonToken t = jp.getCurrentToken();
132132
if (t == JsonToken.VALUE_NULL) {
133-
return null;
133+
return _valueDeserializer.getNullValue(ctxt);
134134
}
135135
if (_valueTypeDeserializer != null) {
136136
return _valueDeserializer.deserializeWithType(jp, ctxt, _valueTypeDeserializer);

src/test/java/com/fasterxml/jackson/databind/deser/TestNullHandling.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
import java.io.IOException;
44
import java.util.Arrays;
5+
import java.util.HashMap;
56
import java.util.List;
67
import java.util.Map;
78

8-
9+
import com.fasterxml.jackson.annotation.JsonAnySetter;
910
import com.fasterxml.jackson.core.*;
1011
import com.fasterxml.jackson.databind.*;
1112
import com.fasterxml.jackson.databind.module.SimpleModule;
@@ -23,12 +24,51 @@ public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOE
2324
public String getNullValue(DeserializationContext ctxt) { return "funny"; }
2425
}
2526

27+
static class AnySetter{
28+
29+
private Map<String,String> any = new HashMap<String,String>();
30+
31+
@JsonAnySetter
32+
public void setAny(String name, String value){
33+
this.any.put(name,value);
34+
}
35+
36+
public Map<String,String> getAny(){
37+
return this.any;
38+
}
39+
}
40+
2641
/*
2742
/**********************************************************
2843
/* Test methods
2944
/**********************************************************
3045
*/
3146

47+
public void testAnySetterNulls() throws Exception {
48+
ObjectMapper mapper = new ObjectMapper();
49+
SimpleModule module = new SimpleModule("test", Version.unknownVersion());
50+
module.addDeserializer(String.class, new FunnyNullDeserializer());
51+
mapper.registerModule(module);
52+
53+
String fieldName = "fieldName";
54+
String nullValue = "{\""+fieldName+"\":null}";
55+
56+
// should get non-default null directly:
57+
AnySetter result = mapper.readValue(nullValue, AnySetter.class);
58+
59+
assertEquals(1, result.getAny().size());
60+
assertNotNull(result.getAny().get(fieldName));
61+
assertEquals("funny", result.getAny().get(fieldName));
62+
63+
// as well as via ObjectReader
64+
ObjectReader reader = mapper.readerFor(AnySetter.class);
65+
result = reader.readValue(nullValue);
66+
67+
assertEquals(1, result.getAny().size());
68+
assertNotNull(result.getAny().get(fieldName));
69+
assertEquals("funny", result.getAny().get(fieldName));
70+
}
71+
3272
// Test for [JACKSON-643]
3373
public void testCustomRootNulls() throws Exception
3474
{

0 commit comments

Comments
 (0)