JWT无法转换set<>集合

JWT无法转换set<>集合

工程开发中,DTO类中存储了set集合,包装成token,经过jwt解析报List无法转换成set的错误

错误日志

1
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Set

经过debug调试,找到jwt构成代码中

1
2
3
4
5
6
7
8
9
10
11
12
UntypedObjectDeserializer{
...
//495行
case 3:
t = p.nextToken();
if (t == JsonToken.END_ARRAY) {
if (ctxt.isEnabled(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY)) {
return UntypedObjectDeserializer.NO_OBJECTS;
}

return new ArrayList(2);
}

原因在数组传输中转换成Json,反序列化构建成对象的时候,List和Set传输的json的格式是一样的,所以jwt无法判断到底是什么类型,所以他直接返回了一个ArryList

解决方案

所以最终的解决方案,是传输过去一个Set过去,用List来获取反序列化的对象,再转换成Set做存储


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!