嵌套 class 字段的 Jackson 自定义值

Jackson custom value for nested class's field

大家好, 我正在努力使用具有自定义名称的嵌套对象与@JsonProperty 序列化对象。 所以,这里是:

public class Wrapper {

public final Payload payload;

public Wrapper(String name){
this.payload = new Payload(name);
}    

public static final class Payload{
@JsonProperty("customName")
public final String name;

@JsonCreator
public Payload(@JsonProperty ("customName") String name){

this.name = name;
}
}


}

因此,在每次测试中我都会看到非自定义名称 - “name”。我用@JsonProperty 添加了 getter 但没有成功。

我的测试class:

@JsonTest
public class SerializeWrapperTest {


    @Test
    void whenSerialiseThanCorrect() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Wrapper wrapper =
                new Wrapper("name");
        String json = objectMapper.writeValueAsString(wrapper);
        Assertions.assertEquals("{"payload":{"customName":"name"}}",json);
    }
}

测试结果: 预期:{“有效载荷”:{“自定义名称”:“名称”}} 实际:{“有效载荷”:{“名称”:“名称”}}

org.opentest4j.AssertionFailedError.

已编辑。

如果我理解正确,您需要在 json 中为字段“名称”自定义 属性。 为此,您需要执行以下操作 -

     public class Wrapper {

    public final Payload payload;

    public Wrapper(String name){
        this.payload = new Payload(name);
    }

    public static final class Payload{
        @JsonProperty("customName")
        public final String name;

        public Payload(String name){

            this.name = name;
        }
    }

JUnit -

public class WrapperTest {

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void whenSerialiseThanCorrect() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Wrapper wrapper =
                new Wrapper("Ajeet");
        String json = objectMapper.writeValueAsString(wrapper);
        System.out.println(json);
    }
}

}