From 6c1f44a565a5a19bee6ae8a8733b23ef83b8dc74 Mon Sep 17 00:00:00 2001 From: ruying408 <1877972603@qq.com> Date: Mon, 12 May 2025 20:15:01 +0800 Subject: [PATCH] =?UTF-8?q?update:=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=8C=89=E7=B1=BB=E5=9E=8B=E8=BD=AC=E6=8D=A2=E6=94=AF=E6=8C=81?= =?UTF-8?q?pg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/core/request/CrudOption.java | 16 +++-- .../java/com/cool/core/util/ConvertUtil.java | 71 ++++++++++++++++--- 2 files changed, 70 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/cool/core/request/CrudOption.java b/src/main/java/com/cool/core/request/CrudOption.java index 922dc1b..c16954b 100644 --- a/src/main/java/com/cool/core/request/CrudOption.java +++ b/src/main/java/com/cool/core/request/CrudOption.java @@ -10,6 +10,7 @@ import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.cool.core.enums.QueryModeEnum; +import com.cool.core.util.ConvertUtil; import com.mybatisflex.annotation.Table; import com.mybatisflex.core.query.QueryColumn; import com.mybatisflex.core.query.QueryCondition; @@ -97,7 +98,7 @@ public class CrudOption { public CrudOption queryModeEnum(QueryModeEnum queryModeEnum) { this.queryModeEnum = queryModeEnum; if (ObjUtil.equal(queryModeEnum, QueryModeEnum.CUSTOM) - && ObjUtil.isEmpty(asType)) { + && ObjUtil.isEmpty(asType)) { asType = Map.class; } return this; @@ -127,16 +128,17 @@ public class CrudOption { private QueryWrapper build(QueryWrapper queryWrapper, Class entityClass) { if (ObjectUtil.isNotEmpty(fieldEq)) { Arrays.stream(fieldEq).toList().forEach(filed -> { - Object obj = requestParams.get(StrUtil.toCamelCase(filed.getName())); + String filedName = StrUtil.toCamelCase(filed.getName()); + Object obj = requestParams.get(filedName); if (ObjUtil.isEmpty(obj)) { return; } if (obj instanceof JSONArray) { // 集合 - queryWrapper.and(filed.in(((JSONArray)obj).toArray())); + queryWrapper.and(filed.in(ConvertUtil.covertListByClass(filedName, (JSONArray)obj, entityClass).toArray())); } else { // 对象 - queryWrapper.and(filed.eq(obj)); + queryWrapper.and(filed.eq(ConvertUtil.convertByClass(filedName, obj, entityClass))); } }); } @@ -189,12 +191,12 @@ public class CrudOption { tableAlias = queryTable.getName() + "."; } String order = requestParams.getStr("order", - tableAnnotation.camelToUnderline() ? "create_time" : "createTime"); + tableAnnotation.camelToUnderline() ? "create_time" : "createTime"); String sort = requestParams.getStr("sort", "desc"); if (StrUtil.isNotEmpty(order) && StrUtil.isNotEmpty(sort)) { queryWrapper.orderBy( - tableAlias + (tableAnnotation.camelToUnderline() ? StrUtil.toUnderlineCase(order) : order), - sort.equals("asc")); + tableAlias + (tableAnnotation.camelToUnderline() ? StrUtil.toUnderlineCase(order) : order), + sort.equals("asc")); } } } diff --git a/src/main/java/com/cool/core/util/ConvertUtil.java b/src/main/java/com/cool/core/util/ConvertUtil.java index cb63eb6..be72f86 100644 --- a/src/main/java/com/cool/core/util/ConvertUtil.java +++ b/src/main/java/com/cool/core/util/ConvertUtil.java @@ -1,16 +1,13 @@ package com.cool.core.util; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; + +import java.io.*; +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.springframework.web.multipart.MultipartFile; @@ -203,4 +200,58 @@ public class ConvertUtil { private static String[] splitCamelCase(String input) { return input.split("(?<=.)(?=[A-Z])"); } + + /** + * 将给定的字段值转换为可序列化的形式 + * 此方法旨在将一个对象的特定字段值转换为其相应的可序列化类型 + * 它在序列化和反序列化过程中特别有用,确保字段值可以被正确处理 + * + * @param fieldName 字段名称,用于查找字段类型 + * @param fieldValue 待转换的字段值 + * @param clazz 包含该字段的类 + * @return 转换后的可序列化字段值,如果无法确定字段类型,则返回原始值 + */ + public static Object convertByClass(String fieldName, Object fieldValue, Class clazz) { + // 检查输入参数是否为空,如果字段名或字段值为空,则直接返回字段值 + if (fieldName == null || fieldValue == null) { + return fieldValue; + } + + // 获取字段类型 + Class fieldType = getFieldType(clazz, fieldName); + // 如果字段类型为空,则直接返回字段值 + if (fieldType == null) { + return fieldValue; + } + + // 使用Convert类的convert方法将字段值转换为字段类型 + return Convert.convert(fieldType, fieldValue); + } + + public static List covertListByClass(String fieldName, List fieldValue, Class clazz) { + // 检查输入参数是否为空,如果字段名或字段值为空,则直接返回字段值 + if (fieldName == null || fieldValue == null) { + return fieldValue; + } + + // 获取字段类型 + Class fieldType = getFieldType(clazz, fieldName); + // 如果字段类型为空,则直接返回字段值 + if (fieldType == null) { + return fieldValue; + } + + return Collections.singletonList(Convert.toList(fieldType, fieldValue)); + } + /** + * 获取指定类中指定字段的类型 + * + * @param clazz 目标类 + * @param fieldName 字段名称 + * @return 字段的类型 Class,如果字段不存在则返回 null + */ + public static Class getFieldType(Class clazz, String fieldName) { + Field field = ReflectUtil.getField(clazz, fieldName); + return field != null ? field.getType() : null; + } } \ No newline at end of file