在 Jackson 中展平嵌套属性

问题描述 投票:0回答:3

我需要定义一个平面 POJO,将其(平面)属性映射到其 JSON 规范中的嵌套对象。最好用代码解释一下

{
    "offset": 0,
    "pageSize": 10,
    "filter": {
        "key1":"value1",
        "key2": true,
        ....
    }
}

我的 POJO 应如下所示:

public class Pojo {
    private int offset;
    private int pageSize;

    private String key1;
    private boolean key2;
}

到目前为止,我已经尝试用

key
及其
@JsonProperty
属性来注释那些
value
属性

@JsonProperty("filter.key1")
private String key1;

但是当我进入 MVC 控制器时,这些属性虽然是在 JSON 中设置的,但在解码后的 POJO 中却为空。

我该如何解决这个问题?我做错了什么?

我绝对不想创建嵌套子类

java json
3个回答
14
投票

可能目前是不可能的。

这是因为 Jackson 目前支持

@JacksonUnwrapped
相反的情况,但不支持
@JacksonWrapped

功能请求:https://github.com/FasterXML/jackson-annotations/issues/42


1
投票

Baeldung 建议使用设置器或反序列化器。 设置器似乎更容易,所以我只包含该解决方案。

这是设置器解决方案。 下面的快速代码不会因拆箱

NullPointerException
而阻止
Boolean

@JsonProperty("filter")
private void unpackNested(Map<String,Object> filter)
{
    key1 = (String) filter.get("key1");
    key2 = (Boolean) filter.get("key2");
}

0
投票

这个例子似乎做了同样的事情:https://www.baeldung.com/jackson-nested-values

© www.soinside.com 2019 - 2024. All rights reserved.