
Jackson - Serialization Annotations
- Jackson - @JsonAnyGetter
- Jackson - @JsonGetter
- Jackson - @JsonPropertyOrder
- Jackson - @JsonRawValue
- Jackson - @JsonValue
- Jackson - @JsonRootName
- Jackson - @JsonSerialize
Jackson - Deserialization Annotations
- Jackson - @JsonCreator
- Jackson - @JacksonInject
- Jackson - @JsonAnySetter
- Jackson - @JsonSetter
- Jackson - @JsonDeserialize
- Jackson - @JsonEnumDefaultValue
Jackson - Property Inclusion Annotations
- Jackson - @JsonIgnoreProperties
- Jackson - @JsonIgnore
- Jackson - @JsonIgnoreType
- Jackson - @JsonInclude
- Jackson - @JsonAutoDetect
Jackson - Type Handling Annotations
Jackson - General Annotations
- Jackson - @JsonProperty
- Jackson - @JsonFormat
- Jackson - @JsonUnwrapped
- Jackson - @JsonView
- Jackson - @JsonManagedReference
- Jackson - @JsonBackReference
- Jackson - @JsonIdentityInfo
- Jackson - @JsonFilter
Jackson - Miscellaneous
Jackson - Resources
Jackson Annotations - @JsonAnySetter
Overview
@JsonAnySetter annotation allows a setter method to use Map which is then used to deserialize the additional properties of JSON in the similar fashion as other properties.
Example - Deserialization without using @JsonAnySetter
JacksonTester.java
package com.tutorialspoint; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonTester { public static void main(String args[]){ ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"RollNo\" : \"1\",\"Name\" : \"Mark\"}"; try { Student student = mapper.readerFor(Student.class).readValue(jsonString); System.out.println(student.getProperties().get("Name")); System.out.println(student.getProperties().get("RollNo")); } catch (IOException e) { e.printStackTrace(); } } } class Student { private Map<String, String> properties; public Student(){ properties = new HashMap<>(); } public Map<String, String> getProperties(){ return properties; } public void add(String property, String value){ properties.put(property, value); } }
Output
Run the JacksonTester and verify the output −
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "RollNo" (class com.tutorialspoint.Student), not marked as ignorable (one known property: "properties"]) at [Source: REDACTED ('StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION' disabled); line: 1, column: 14] (through reference chain: com.tutorialspoint.Student["RollNo"]) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1207) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2295) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1823) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1801) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:308) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:169) at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342) at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2130) at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1565) at com.tutorialspoint.JacksonTester.main(JacksonTester.java:14)
Example - Deserialization with @JsonAnySetter
JacksonTester.java
package com.tutorialspoint; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonTester { public static void main(String args[]){ ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"RollNo\" : \"1\",\"Name\" : \"Mark\"}"; try { Student student = mapper.readerFor(Student.class).readValue(jsonString); System.out.println(student.getProperties().get("Name")); System.out.println(student.getProperties().get("RollNo")); } catch (IOException e) { e.printStackTrace(); } } } class Student { private Map<String, String> properties; public Student(){ properties = new HashMap<>(); } public Map<String, String> getProperties(){ return properties; } @JsonAnySetter public void add(String property, String value){ properties.put(property, value); } }
Output
Run the JacksonTester and verify the output −
Mark 1
Here we can see, without using @JsonAnySetter, we get the exception during deserialization. Using @JsonAnySetter annotation, we can use map as properties of an object.
Advertisements