[alibaba/fastjson]Guava Multimap 不能序列化

2025-10-31 409 views
0

Multimap 从Java对象到JSON String是正确的,但JSON String无法变成Java的Multimap对象

add Multimap type attribute in entity.
public Multimap<String, String> permissions;
add value for this objects like this:
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("admin", "admin.create");
multimap.put("admin", "admin.update");
multimap.put("admin", "admin.delete");
multimap.put("user", "user.create");
multimap.put("user", "user.delete");
Output is correct
"permissions": {
"admin": [
"admin.create",
"admin.read",
"admin.update",
 "admin.delete"
],
"user": [
"user.create",
"user.read",
"user.update",
"user.delete"
]
}
Input Multimap parameter could not get value.

回答

0
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("a", "111");
multimap.put("a", "222");
multimap.put("u", "111");
multimap.put("u", "222");
multimap.put("u", "333");

System.out.println(JSON.toJSONString(multimap));
String s = "{\"a\":[\"111\",\"222\"],\"u\":[\"111\",\"222\",\"333\"]}";
Multimap<String, String> map = JSON.parseObject(s, Multimap.class);
System.out.println(map);

运行输出

{"a":["111","222"],"u":["111","222","333"]}
{}

@wenshao 这种类型的处理,我应该怎么实现呢?

3

guava的map,没有实现java的map接口,需要单独处理。 建议处理成Hashmap,再转成MultiMap

7

问题已修复,请用新版本 https://github.com/alibaba/fastjson/releases/tag/1.2.55

6

@wenshao 为何我用1.2.58还是遇到了反序列化Multimap失败的问题呢?Mutimap作为对象属性的时候。

2

我也碰到相同问题,1.2.58仍然反序列化失败

1

@wenshao 1.2.62反序列化还不行?

2

目前仍然不支持guava反序列化

5

貌似1.2.68 版本还不支持?