Skip to content

Commit 55232b5

Browse files
committed
Fix #2627
1 parent 8dafdea commit 55232b5

File tree

9 files changed

+75
-39
lines changed

9 files changed

+75
-39
lines changed

release-notes/VERSION-2.x

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ Project: jackson-databind
4242
(reported by Bartosz B)
4343
#2592: `ObjectMapper.setSerializationInclusion()` is ignored for `JsonAnyGetter`
4444
(reported by Oleksii K)
45+
#2627: JsonIgnoreProperties(ignoreUnknown = true) does not work on field and method level
46+
(reported by robotmrv@github)
4547
#2632: Failure to resolve generic type parameters on serialization
4648
(reported by Simone D)
4749
#2636: ObjectReader readValue lacks Class<T> argument

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

+5
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ public BeanDeserializer withIgnorableProperties(Set<String> ignorableProps) {
122122
return new BeanDeserializer(this, ignorableProps);
123123
}
124124

125+
@Override
126+
public BeanDeserializerBase withIgnoreAllUnknown(boolean ignoreUnknown) {
127+
return new BeanDeserializer(this, ignoreUnknown);
128+
}
129+
125130
@Override
126131
public BeanDeserializerBase withBeanProperties(BeanPropertyMap props) {
127132
return new BeanDeserializer(this, props);

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

+19
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,18 @@ protected BeanDeserializerBase(BeanDeserializerBase src, BeanPropertyMap beanPro
400400

401401
public abstract BeanDeserializerBase withIgnorableProperties(Set<String> ignorableProps);
402402

403+
// NOTE! To be made `abstract` in 2.12 or later
404+
/**
405+
* @since 2.11
406+
*/
407+
public BeanDeserializerBase withIgnoreAllUnknown(boolean ignoreUnknown) {
408+
// Only to prevent some backwards-compatibility issues
409+
if (ignoreUnknown == _ignoreAllUnknown) {
410+
return this;
411+
}
412+
return withIgnorableProperties(_ignorableProps);
413+
}
414+
403415
/**
404416
* Mutant factory method that custom sub-classes must override; not left as
405417
* abstract to prevent more drastic backwards compatibility problems.
@@ -740,6 +752,13 @@ public JsonDeserializer<?> createContextual(DeserializationContext ctxt,
740752
}
741753
contextual = contextual.withIgnorableProperties(ignored);
742754
}
755+
// 30-Mar-2020, tatu: As per [databind#2627], need to also allow
756+
// per-property override to "ignore all unknown".
757+
// NOTE: there is no way to override with `false` because annotation
758+
// defaults to `false` (i.e. can not know if `false` is explicit value)
759+
if (ignorals.getIgnoreUnknown() && !_ignoreAllUnknown) {
760+
contextual = contextual.withIgnoreAllUnknown(true);
761+
}
743762
}
744763
}
745764

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

+5
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ public BeanDeserializerBase withIgnorableProperties(Set<String> ignorableProps)
136136
return new BuilderBasedDeserializer(this, ignorableProps);
137137
}
138138

139+
@Override
140+
public BeanDeserializerBase withIgnoreAllUnknown(boolean ignoreUnknown) {
141+
return new BuilderBasedDeserializer(this, ignoreUnknown);
142+
}
143+
139144
@Override
140145
public BeanDeserializerBase withBeanProperties(BeanPropertyMap props) {
141146
return new BuilderBasedDeserializer(this, props);

src/main/java/com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.java

+6
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ public BeanDeserializerBase withIgnorableProperties(Set<String> ignorableProps)
8181
_targetType, _orderedProperties, _buildMethod);
8282
}
8383

84+
@Override
85+
public BeanDeserializerBase withIgnoreAllUnknown(boolean ignoreUnknown) {
86+
return new BeanAsArrayBuilderDeserializer(_delegate.withIgnoreAllUnknown(ignoreUnknown),
87+
_targetType, _orderedProperties, _buildMethod);
88+
}
89+
8490
@Override
8591
public BeanDeserializerBase withBeanProperties(BeanPropertyMap props) {
8692
return new BeanAsArrayBuilderDeserializer(_delegate.withBeanProperties(props),

src/main/java/com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.java

+6
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ public BeanDeserializerBase withIgnorableProperties(Set<String> ignorableProps)
7171
_orderedProperties);
7272
}
7373

74+
@Override
75+
public BeanDeserializerBase withIgnoreAllUnknown(boolean ignoreUnknown) {
76+
return new BeanAsArrayDeserializer(_delegate.withIgnoreAllUnknown(ignoreUnknown),
77+
_orderedProperties);
78+
}
79+
7480
@Override
7581
public BeanDeserializerBase withBeanProperties(BeanPropertyMap props) {
7682
return new BeanAsArrayDeserializer(_delegate.withBeanProperties(props),

src/test/java/com/fasterxml/jackson/databind/deser/filter/IgnorePropertyOnDeserTest.java

+31
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.fasterxml.jackson.databind.deser.filter;
22

3+
import java.io.IOException;
4+
35
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
46
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
7+
58
import com.fasterxml.jackson.databind.BaseMapTest;
69
import com.fasterxml.jackson.databind.ObjectMapper;
710

@@ -35,6 +38,22 @@ static class Simple1595 {
3538
public void setName(String name) { this.name = name; }
3639
}
3740

41+
// [databind#2627]
42+
43+
@JsonIgnoreProperties(ignoreUnknown = true)
44+
static class MyPojoValue {
45+
@JsonIgnoreProperties(ignoreUnknown = true)
46+
MyPojo2627 value;
47+
48+
public MyPojo2627 getValue() {
49+
return value;
50+
}
51+
}
52+
53+
static class MyPojo2627 {
54+
public String name;
55+
}
56+
3857
/*
3958
/****************************************************************
4059
/* Unit tests
@@ -88,4 +107,16 @@ public void testIgnoreGetterNotSetter1595() throws Exception
88107
Simple1595 des = mapper.readValue(aposToQuotes("{'id':123,'name':'jack'}"), Simple1595.class);
89108
assertEquals("jack", des.getName());
90109
}
110+
111+
// [databind#2627]
112+
public void testIgnoreUnknownOnField() throws IOException
113+
{
114+
ObjectMapper objectMapper = new ObjectMapper();
115+
String json = "{\"value\": {\"name\": \"my_name\", \"extra\": \"val\"}, \"type\":\"Json\"}";
116+
MyPojoValue value = objectMapper.readValue(json, MyPojoValue.class);
117+
assertNotNull(value);
118+
assertNotNull(value.getValue());
119+
assertEquals("my_name", value.getValue().name);
120+
}
91121
}
122+

src/test/java/com/fasterxml/jackson/databind/filter/ProblemHandler1767Test.java renamed to src/test/java/com/fasterxml/jackson/databind/deser/filter/ProblemHandler1767Test.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.fasterxml.jackson.databind.filter;
1+
package com.fasterxml.jackson.databind.deser.filter;
22

33
import com.fasterxml.jackson.databind.*;
44
import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;

src/test/java/com/fasterxml/jackson/failing/IgnoreUnknownOnField2627Test.java

-38
This file was deleted.

0 commit comments

Comments
 (0)