一、从对象列表中提取并组装 JSON字段的数据:(工具类)
public class JsonMsgUtils<T> { /** * 从对象列表中提取并组装 JSON 字段的数据。 * * @param logs 包含对象的列表 * @param targetClass 目标对象类型,表示 JSON 消息的结构 * @param jsonMsgFieldName JSON 字段的名称 * @return 组装后的 JSON 消息数据列表 */ public static <T> List<T> extractAndCombineJsonMsg(List<?> logs, Class<T> targetClass, String jsonMsgFieldName) { List<T> result = new ArrayList<>(); for (Object log : logs) { try { // 使用反射获取jsonMsg字段的值 Method getterMethod = log.getClass().getMethod("get" + capitalize(jsonMsgFieldName)); Object jsonMsgValue = getterMethod.invoke(log); if (jsonMsgValue != null) { Type jsonMsgListType = TypeToken.getParameterized(List.class, targetClass).getType(); List<T> parsedJsonMsgList = new Gson().fromJson(jsonMsgValue.toString(), jsonMsgListType); result.addAll(parsedJsonMsgList); } } catch (Exception e) { e.printStackTrace(); } } return result; } private static String formatLocalDateTime(LocalDateTime localDateTime) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); return localDateTime.format(formatter); } /** * 将字符串的首字母转换为大写。 * * @param str 待转换的字符串 * @return 转换后的字符串 */ private static String capitalize(String str) { if (str == null || str.isEmpty()) { return str; } return Character.toUpperCase(str.charAt(0)) + str.substring(1); } }
二、封装组装后的 JSON 数据的类(你们可以根据自己的字段定义)
(1)、数据库JSON字段如下:
(2)、定义组装后的对象:
/** * 封装组装后的 JSON 数据的类 * @author FengQing * @program yf-client * @description * @date 2023/11/25 */ @Data @NoArgsConstructor @AllArgsConstructor public class AssembledJsonMsg { /** * 字段名称 */ private String fieldName; /** * 修改后的值 */ private String newBean; /** * 修改前的值 */ private String oldBean; /** * 修改时间 */ private String updateTime; /** * 操作用户名 */ private String userName; }
三、在业务处理要组装的数据:调用(extractAndCombineJsonMsg)工具类;
以下是个简单的示例
/** * 根据条件查询操作日志记录列表 * @param params * @return */ @Override public List<AssembledJsonMsg> selectChannelLogList(Map<String, Object> params) { LambdaQueryWrapper<ChannelLog> wrapper = Wrappers.lambdaQuery(); wrapper.eq(params.get("channelId") != null, ChannelLog::getChannelId, params.get("channelId")) .orderByDesc(ChannelLog::getId); List<ChannelLog> list = super.list(wrapper); List<AssembledJsonMsg> jsonMsgList = JsonMsgUtils.extractAndCombineJsonMsg(list, AssembledJsonMsg.class, "jsonMsg"); return jsonMsgList; }
效果如下:
{ "code": 0, "msg": "操作成功", "data": [ { "fieldName": "公司名称", "newBean": "测试有限公司", "oldBean": "测试有限公司001", "updateTime": "2023-11-27 13:47:40", "userName": "管理员" }, { "fieldName": "分类", "newBean": "0,2,1", "oldBean": "0,2", "updateTime": "2023-11-27 13:47:11", "userName": "管理员" } ] }
标签:return,String,List,private,JSON,str,Java From: https://www.cnblogs.com/springclout/p/17861191.html