当前位置: 首页 > 面试题库 >

为什么我无法使用Jackson Java库解包和序列化Java映射?

苏墨竹
2023-03-14
问题内容

我的豆子看起来像这样:

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时:

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("\n"+mapper.writeValueAsString(bean));

我得到这样的结果:

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

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

根据JacksonFeatureUnwrapping文档中的说明。为什么我没有得到解包结果?


问题答案:

@JsonUnwrapped不适用于地图,仅适用于具有getter和setter的正确POJO。对于地图,应使用@JsonAnyGetter@JsonAnySetter(在杰克逊版本>
= 1.6中可用)。

在您的情况下,请尝试以下操作:

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

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

这样,您还可以直接向地图添加属性,例如add('abc','xyz')abc使用value向地图添加新键xyz



 类似资料:
  • 问题内容: 经过数小时的搜索,我终于意识到java.sql.ResultSet无法序列化,也没有办法。我尝试添加到列表中,作为Serializable对象和其他内容中的实例变量,但事实证明这只是幼稚而绝望的尝试。我试图使用的实现的RowSet像对CachedRowSetImpl是序列化,但它们增加了响应时间,最有可能是因为他们迭代ResultSet中。最重要的是,除非选择迭代ResultSet,否

  • 我正在尝试在Mac OS 10.12中安装sequelize cli。6. 在终端,我做到了 我得到了 然后,我试着 我得到了 无法解决序列化包在 /Users/bheng/Sites/BASE 我甚至试着按照这篇文章的建议使用。 我得到了同样的结果。 我还应该尝试什么?

  • 我有以下设置: ValidationResults类序列化后,我收到以下错误: 我使用play.libs.Json实用程序类,它只是Jackson对象映射器的包装器。有人知道问题是什么吗?我如何解决这个问题? ValidationError类的结构如下:

  • 所以我只是从移动到。像往常一样,一个看似简单的变化之后是一些副作用,包括吞下异常——抱歉咆哮。 这是我过去访问用户主体的方式: 出于某种原因,总是只返回用户名,而不是对象。这对我来说已经足够好了,所以我就这么做了。 现在我已经更改了令牌存储,确实返回了对象。我可以忍受这一点,但我想知道为什么这突然改变了——因为这一点,我不得不重构一些代码,因为到目前为止,我一直期望用户名来自。我也想知道我是否能改

  • 本文向大家介绍如何使用Java中的flexjson库序列化映射?,包括了如何使用Java中的flexjson库序列化映射?的使用技巧和注意事项,需要的朋友参考一下 Flexjson是一个轻量级的库,用于将Java对象序列化和反序列化成JSON格式以及从JSON格式反序列化。 我们还可以使用JSONSerializer类的serialize()方法序列化Map,它对目标实例执行浅层序列化。 语法 示

  • 如题目所述,想请教一下大佬们在Java中序列化与反序列化的意义是什么,如何理解Java的序列化和反序列化?