后端项目开发:工具类封装(序列化、反射)

1.整合Jackson

根据《阿里巴巴开发规范》,包名使用单数,类名可以使用复数。

所以generic-common创建util包和utils工具类

很多时候我们需要将接收到的json数据转换为对象,或者将对象转为json存储。这时候我们需要编写用于json转换的工具类。

新建util目录,再创建JacksonUtils类

java 复制代码
/**
 * JSON格式转换的工具类
 */
public class JacksonUtils {
    private JacksonUtils() {}

    public final static ObjectMapper MAPPER;

    static {
        MAPPER = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
    }

    public static String serialize(Object obj) {
        try {
            return MAPPER.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Object deserialize(String jsonText, TypeReference type) {
        try {
            return MAPPER.readValue(jsonText, type);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static <T> T deserialize(String jsonText, Class<T> beanClass) {
        try {
            return MAPPER.readValue(jsonText, beanClass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static JsonNode deserialize(String jsonText) {
        try {
            return MAPPER.readTree(jsonText);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

2.反射工具类ReflectionUtils

java 复制代码
/**
 * 反射相关方法
 */
public class ReflectionUtils {
    /**
     * 根据方法名调用指定对象的方法
     * @param object 要调用方法的对象
     * @param method 要调用的方法名
     * @param args 参数对象数组
     * @return
     */
    public static Object invoke(Object object, String method, Object... args) {
        Object result = null;
        Class<? extends Object> clazz = object.getClass();
        Method queryMethod = getMethod(clazz, method, args);
        if(queryMethod != null) {
            try {
                result = queryMethod.invoke(object, args);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        } else {
            try {
                throw new NoSuchMethodException(clazz.getName() + " 类中没有找到 " + method + " 方法。");
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 根据方法名和参数对象查找方法
     * @param clazz
     * @param name
     * @param args 参数实例数据
     * @return
     */
    public static Method getMethod(Class<? extends Object> clazz, String name, Object[] args) {
        Method queryMethod = null;
        Method[] methods = clazz.getMethods();
        for(Method method:methods) {
            if(method.getName().equals(name)) {
                Class<?>[] parameterTypes = method.getParameterTypes();
                if(parameterTypes.length == args.length) {
                    boolean isSameMethod = true;
                    for(int i=0; i<parameterTypes.length; i++) {
                        Object arg = args[i];
                        if(arg == null) {
                            arg = "";
                        }
                        if(!parameterTypes[i].equals(args[i].getClass())) {
                            isSameMethod = false;
                        }
                    }
                    if(isSameMethod) {
                        queryMethod = method;
                        break ;
                    }
                }
            }
        }
        return queryMethod;
    }
}
相关推荐
tuokuac1 小时前
maven与maven-archetype-plugin版本匹配问题
java·maven
ankleless1 小时前
Spring Boot 实战:从项目搭建到部署优化
java·spring boot·后端
野生技术架构师2 小时前
2025年中高级后端开发Java岗八股文最新开源
java·开发语言
静若繁花_jingjing2 小时前
JVM常量池
java·开发语言·jvm
David爱编程3 小时前
为什么线程不是越多越好?一文讲透上下文切换成本
java·后端
A尘埃3 小时前
Redis在地理空间数据+实时数据分析中的具体应用场景
java·redis
csxin3 小时前
Spring Boot 中如何设置 serializer 的 TimeZone
java·后端
杨过过儿3 小时前
【Task02】:四步构建简单rag(第一章3节)
android·java·数据库
青云交3 小时前
Java 大视界 -- Java 大数据分布式计算在基因测序数据分析与精准医疗中的应用(400)
java·hadoop·spark·分布式计算·基因测序·java 大数据·精准医疗
荔枝爱编程3 小时前
如何在 Docker 容器中使用 Arthas 监控 Java 应用
java·后端·docker