I use jackson for converting JSON to Object class.
JSON:
{ "aaa":"111", "bbb":"222", "ccc":"333" }
Object Class:
class Test{ public String aaa; public String bbb; }
Code:
ObjectMapper mapper = new ObjectMapper(); Object obj = mapper.readValue(content, valueType);
My code throws exception like that:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "cccc" (Class com.isoftstone.banggo.net.result.GetGoodsInfoResult), not marked as ignorable
And I don't want to add a prop to class Test,I just want jackson convert the exist value whith is also exist in Test.
You can ignore the unrecognized fields by configuring the ObjectMapper class: mapper. configure(DeserializationFeature. FAIL_ON_UNKNOWN_PROPERTIES, false);
Jackson API provides two ways to ignore unknown fields, first at the class level using @JsonIgnoreProperties annotation and second at the ObjectMapper level using configure() method.
If the JSON string consists of properties that cannot be mapped to java class attributes, then we encounter UnrecognizedPropertyException.
If there are fields in Java objects that do not wish to be serialized, we can use the @JsonIgnore annotation in the Jackson library. The @JsonIgnore can be used at the field level, for ignoring fields during the serialization and deserialization.
Jackson provides a few different mechanisms to configure handling of "extra" JSON elements. Following is an example of configuring the ObjectMapper
to not FAIL_ON_UNKNOWN_PROPERTIES
.
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import org.codehaus.jackson.annotate.JsonMethod; import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; public class JacksonFoo { public static void main(String[] args) throws Exception { // { "aaa":"111", "bbb":"222", "ccc":"333" } String jsonInput = "{ \"aaa\":\"111\", \"bbb\":\"222\", \"ccc\":\"333\" }"; ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY); mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); Test test = mapper.readValue(jsonInput, Test.class); } } class Test { String aaa; String bbb; }
For other approaches, see http://wiki.fasterxml.com/JacksonHowToIgnoreUnknown
As of Jackson 2.0 the inner enum (DeserializationConfig.Feature) has been moved to a standalone enum (DeserializationFeature):
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With