文章目录
- 前言
- 一、错误回顾
- 1.详细信息
- 2.代码详情
- 二、解决方案
- 1.错误原因
- 2.解决方案
- 1.使用 new ObjectMapper() + new TypeReference<List>(){}
- 2.使用 SerializerFeature.WriteMapNullValue.getMask()
- 总结
前言
当我们远程调用传递泛型集合,如 List<?> 时,在我们使用 JSON 将字符串转为 List 时,即:JSON.parseArray(“字符串”).toJavaList(Clazz); 有时会报:java.lang.UnsupportedOperationException: null 错误。
提示:以下是本篇文章正文内容,下面案例可供参考
一、错误回顾
1.详细信息
java.lang.UnsupportedOperationException: null
at com.alibaba.fastjson2.reader.ObjectReaderBaseModule$PrimitiveImpl.createInstance(ObjectReaderBaseModule.java:978) ~[fastjson2-2.0.0.jar:na]
at com.alibaba.fastjson2.reader.ObjectReader.createInstance(ObjectReader.java:53) ~[fastjson2-2.0.0.jar:na]
at com.alibaba.fastjson2.util.TypeUtils.cast(TypeUtils.java:167) ~[fastjson2-2.0.0.jar:na]
at com.alibaba.fastjson2.reader.ObjectReader.createInstance(ObjectReader.java:74) ~[fastjson2-2.0.0.jar:na]
at com.alibaba.fastjson.JSONArray.toJavaList(JSONArray.java:207) ~[fastjson-2.0.0.jar:na]
at com.sty.topology.web.service.impl.TopologyTreeServiceImpl.olmMonitor(TopologyTreeServiceImpl.java:700) ~[classes/:na]
at com.sty.topology.web.service.impl.TopologyTreeServiceImpl$$FastClassBySpringCGLIB$$6ec93c49.invoke(<generated>) ~[classes/:na]
2.代码详情
报错代码显示为:toJavaList(LightPath.class); 错误
List<LightPath> lightPaths = JSON.parseArray(JSON.toJSONString(object)).toJavaList(LightPath.class);
二、解决方案
1.错误原因
主要是我们返回的 list 中,含有 $ref 返回的数据,导致json解析不出来。
2.解决方案
1.使用 new ObjectMapper() + new TypeReference(){}
List<LightPath> lightPaths = new ObjectMapper().convertValue(object,
new TypeReference<List<LightPath>>() {});
2.使用 SerializerFeature.WriteMapNullValue.getMask()
List<LightPath> lightPaths = JSON.parseArray(JSON.toJSONString(object,
SerializerFeature.WriteMapNullValue.getMask())).toJavaList(LightPath.class);
JSON.toJSONString(jsonObject),出现 “$ref“ 解决方案
总结
该是你的总归是你的,不是你的也强求不来。