ConvertUtil - 类型转换工具
ConvertUtil 提供对象间的统一类型转换,支持 Bean ↔ Map 互转、Bean ↔ Bean 复制、集合/数组转换,配合 @SetValue 注解实现扁平 Bean 与嵌套 JSON 的双向映射。
convert — 统一转换入口
自动根据目标类型选择合适的转换策略:
// Map → Bean
User user = ConvertUtil.convert(jsonMap, User.class);
// Bean → Map
Map<String, Object> map = ConvertUtil.convert(user, Map.class);
// JSON 字符串 → Bean
User user = ConvertUtil.convert(jsonStr, User.class);
// 数组/集合转换
List<User> users = ConvertUtil.convert(jsonList, List.class);
convertList — 批量转换
// List<JSONMap> → List<User>
List<User> users = ConvertUtil.convertList(jsonMapList, User.class);
// 带回调处理
List<User> users = ConvertUtil.convertList(list, User.class, user -> {
user.setCreateTime(LocalDateTime.now());
});
@SetValue 注解配合
ConvertUtil 在 Bean ↔ Map 转换时自动识别 @SetValue 注解:
@Data
public class UserForm {
private String name;
@SetValue("profile")
private String phone;
@SetValue("profile")
private String address;
}
// 扁平 Bean → 嵌套 JSON
UserForm form = new UserForm();
form.setName("张三");
form.setPhone("13800138000");
JSONMap json = ConvertUtil.convert(form, JSONMap.class);
// → {"name":"张三","profile":{"phone":"13800138000"}}
// 嵌套 JSON → 扁平 Bean
UserForm result = ConvertUtil.convert(json, UserForm.class);
// result.phone = "13800138000"
ValUtil 的路径取值与设值
ValUtil 新增了 at() 和 set() 方法,支持路径表达式操作任意对象:
// 路径取值(支持 Map/Bean/List/数组)
String city = ValUtil.at(user, "profile.address.city");
// 路径设值
ValUtil.set(user, "profile.address.city", "上海", false);
注意事项
- 属性名必须完全匹配(区分大小写)
- 简单类型自动转换(String → Integer 等),复杂类型可能失败
@SetValue注解的值作为嵌套路径前缀,自动展开/收拢