Skip to content

Commit 2cf2870

Browse files
committed
Merge branch '2.6' into 2.7
Conflicts: release-notes/VERSION
2 parents b65b3cb + 27d83ee commit 2cf2870

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

release-notes/VERSION

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Project: jackson-databind
88

99
#1225: `JsonMappingException` should override getProcessor()
1010
(reported by Nick B)
11+
#1228: @JsonAnySetter does not deserialize null to Deserializer's NullValue
12+
(contributed by Eric S)
1113

1214
2.7.4 (29-Apr-2016)
1315

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

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

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

+41-1
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)