核心思路:先校验再转换
1.转化成实体类对象
Map<String, Object> extendMap = JSONUtil.parseObj(extend);
if (attachInfoObj != null) {
Object attachInfosObject = extendMap.get("attachInfos");
// 校验是否为JSON对象类型(JSONObject或Map,这两种是JSON解析的常见类型)
attachInfoObj instanceof JSONObject || attachInfoObj instanceof Map
// 使用Hutool的Convert工具类转换
attachInfo = Convert.convert(AttachInfo.class, attachInfoObj);
}
2.转换列表对象
Map<String, Object> extendMap = JSONUtil.parseObj(extend);
Object attachInfosObject = extendMap.get("attachInfos");
List<AttachInfo> arrayList = new ArrayList<>();
if (!ObjectUtil.isEmpty(attachInfosObject)) {
// 使用Hutool.Convert工具类,将List<?>转为目标类型List<AttachInfo>
arrayList = Convert.toList(AttachInfo.class, (List<?>) attachInfosObject);
// 处理空集合(避免后续遍历NullPointerException)
}
3.转换成基础类型
String title = extendMap.get("title").toString();
总结
instanceof 运算符的基本原理
instanceof 是 Java 的二元运算符,语法为:
对象 instanceof 类型
其作用是:判断左侧对象的运行时类型是否是右侧类型(或其子类型、实现类)的实例,返回 boolean 值(true 或 false)。
Hutool.Convert安全类型转换
1.convert 是一个泛型方法。
1.支持多类型转换;
2.自动处理空值;
3.类型不匹配时的容错。
2.toList内部会遍历原始集合的每个元素,自动将其转换为目标对象。
-
若元素是
Map<String, Object>(JSON 对象解析后的常见类型),会根据键名匹配实体类的字段并赋值; -
若元素是
JSONObject(Hutool 的 JSON 对象),会调用其toBean方法转换为目标实体类; -
转换失败的元素会被忽略(不会抛出异常,保证整体流程不中断)。
1575

被折叠的 条评论
为什么被折叠?



