UnwrappedWithAlias5884Test.java

package tools.jackson.databind.struct;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.annotation.*;

import tools.jackson.databind.*;
import tools.jackson.databind.testutil.DatabindTestUtil;

import static org.junit.jupiter.api.Assertions.*;

// [databind#5884] ArrayIndexOutOfBoundsException with @JsonUnwrapped and @JsonAlias
public class UnwrappedWithAlias5884Test extends DatabindTestUtil
{
    @JsonRootName("person")
    static class Person {
        @JsonAlias("n")
        public String name;

        @JsonUnwrapped
        public Job job;
    }

    static class Job {
        public String jobName;
        public String jobAddress;
    }

    private final ObjectMapper MAPPER = jsonMapperBuilder()
            .enable(DeserializationFeature.UNWRAP_ROOT_VALUE)
            .build();

    @Test
    public void testUnwrappedWithAlias() throws Exception
    {
        String json = a2q("{'person':{'name':'Alice','jobName':'engineer','jobAddress':'NYC'}}");
        Person person = MAPPER.readValue(json, Person.class);
        assertEquals("Alice", person.name);
        assertNotNull(person.job);
        assertEquals("engineer", person.job.jobName);
        assertEquals("NYC", person.job.jobAddress);
    }

    @Test
    public void testUnwrappedWithAliasUsed() throws Exception
    {
        String json = a2q("{'person':{'n':'Alice','jobName':'engineer','jobAddress':'NYC'}}");
        Person person = MAPPER.readValue(json, Person.class);
        assertEquals("Alice", person.name);
        assertNotNull(person.job);
        assertEquals("engineer", person.job.jobName);
        assertEquals("NYC", person.job.jobAddress);
    }
}