Java UnwrappedPropertyHandler-class And Method Code Example

Here is an example of using the UnwrappedPropertyHandler class from the Jackson Databind library in Java:

import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.fasterxml.jackson.databind.ser.impl.UnwrappedPropertyHandler;

public class Example {
    public static class Address {
        public String street;
        public String city;

    public static class User {
        public String name;

        public Address address;

    public static class CustomUnwrappedPropertyHandler extends UnwrappedPropertyHandler {
        public CustomUnwrappedPropertyHandler(BeanPropertyDefinition propertyDef, AnnotatedMethod getter, AnnotatedMethod setter) {
            super(propertyDef, getter, setter);

        public void serializeAsField(Object bean, JsonGenerator gen, SerializerProvider prov) throws Exception {
            Address address = (Address) getter.invoke(bean);
            gen.writeStringField("street", address.street);

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.addHandler(new CustomUnwrappedPropertyHandler());
        User user = new User(); = "John";
        user.address = new Address();
        user.address.street = "Main St"; = "Anytown";
        String json = mapper.writeValueAsString(user);

The output of the example above will be:

{"name":"John","street":"Main St","city":"Anytown"}

In this example, the Address properties are serialized as if they were direct properties of the User class, because of the use of the @JsonUnwrapped annotation on the address field. The custom UnwrappedPropertyHandler class is used to specify how the properties should be serialized.