为什么我无法使用 Jackson Java 库解包和序列化 Java 映射? [英] Why I'm not able to unwrap and serialize a Java map using the Jackson Java library?

查看:23
本文介绍了为什么我无法使用 Jackson Java 库解包和序列化 Java 映射?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 bean 看起来像这样:

My bean looks like this:

class MyBean {

    private @JsonUnwrapped HashMap<String, String> map = new HashMap<String, String>();

    private String name;

    public HashMap<String, String> getMap() {
        return map;
    }

    public void setMap(HashMap<String, String> map) {
        this.map = map;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

当我使用以下代码序列化 bean 时:

While I'm serializing the bean using the following code:

MyBean bean = new MyBean();
HashMap<String, String> map = new HashMap<String, String>();;
map.put("key1", "value1");
map.put("key2", "value2");
bean.setMap(map);
bean.setName("suren");
ObjectMapper mapper = new ObjectMapper();
System.out.println("
"+mapper.writeValueAsString(bean));

我得到这样的结果:

{"map":{"key2":"value2","key1":"value1"},"name":"suren"}

但是

{"key2":"value2","key1":"value1","name":"suren"}

预期符合 JacksonFeatureUnwrapping 文档.为什么我没有得到解包的结果?

is expected per the JacksonFeatureUnwrapping documentation. Why am I not getting the unwrapped result?

推荐答案

@JsonUnwrapped 不适用于地图,仅适用于具有 getter 和 setter 的适当 POJO.对于地图,您应该使用 @JsonAnyGetter@JsonAnySetter(适用于 jackson 版本 >= 1.6).

@JsonUnwrapped doesn't work for maps, only for proper POJOs with getters and setters. For maps, You should use @JsonAnyGetter and @JsonAnySetter (available in jackson version >= 1.6).

在你的情况下,试试这个:

In your case, try this:

@JsonAnySetter 
public void add(String key, String value) {
    map.put(key, value);
}

@JsonAnyGetter
public Map<String,String> getMap() {
    return map;
}

这样,你也可以直接给地图添加属性,比如add('abc','xyz')会在地图上添加一个新的key abc值为 xyz.

That way, you can also directly add properties to the map, like add('abc','xyz') will add a new key abc to the map with value xyz.

这篇关于为什么我无法使用 Jackson Java 库解包和序列化 Java 映射?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆