为什么要有一些自己封装的工具类?以本文中的fastjson为例子,在平时开发中,用到fastjson的时候,都是直接像下面这样写的:
// ****** 常见的用法 ******
// 把对象转成json字符串
JSON.toJSONString(response);
// 把json字符串转成对象
Response response = JSON.parseObject(str, Response.class);
这样用没问题,但是在后面做系统改造升级的时候,决定把fastjson升级到fastjson2,所有涉及到用了fastjson的类,导包的地方都要改,虽然可以全局替换,但是改的文件非常多,改完还得检查一下。但是如果有一个统一的工具类,只需要改工具类就可以了,其它用了这个工具类的地方都不用改,非常方便,也不会出错。
还有其它的例子,比如log,在springboot中,默认的logback,有的地方或其它工程用的log4j,到后面为了统一,肯定要改成其中一个,如果有一个log的工具类,那切换不同的log,改工具类就行了,不然就得一个一个文件改。
下面是一个简单的fastjson的工具类,可以直接复制使用:
package com.xxxx.xxxx;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import java.util.List;
public class JsonUtil {
/**
* 将对象转换为JSON字符串
* @param obj 要转换为JSON的对象
* @return JSON字符串
*/
public static String toJSONString(Object obj) {
return JSON.toJSONString(obj);
}
/**
* 将对象转换为byte[]
* @param obj 要转换为JSON的对象
* @return byte[]
*/
public static byte[] toJSONBytes(Object obj) {
return JSON.toJSONBytes(obj);
}
/**
* 将JSON字符串转换为指定类型的对象
* @param jsonString JSON字符串
* @param clazz 目标对象类型的Class
* @param <T> 目标对象的类型
* @return 转换后的目标对象
*/
public static <T> T parseObject(String jsonString, Class<T> clazz) {
return JSON.parseObject(jsonString, clazz);
}
/**
* 将JSON字符串转换为指定类型的list
* @param jsonString JSON字符串
* @param clazz 目标对象类型的Class
* @param <T> 目标对象的类型
* @return 转换后的目标对象
*/
public static <T> List<T> parseArray(String jsonString, Class<T> clazz) {
return JSON.parseArray(jsonString, clazz);
}
/**
* 将JSON字符串转换为JSONObject对象
* @param jsonString JSON字符串
* @return 转换后的JSONObject对象
*/
public static JSONObject parseJSONObject(String jsonString) {
return JSON.parseObject(jsonString);
}
/**
* 将JSON字符串转换为JSONArray对象
* @param jsonString JSON字符串
* @return 转换后的JSONArray对象
*/
public static JSONArray parseJSONArray(String jsonString) {
return JSON.parseArray(jsonString);
}
/**
* 将Java对象转换为JSONObject对象
* @param obj Java对象
* @return 转换后的JSONObject对象
*/
public static JSONObject toJSONObject(Object obj) {
return (JSONObject) JSON.toJSON(obj);
}
/**
* 将Java对象转换为JSONArray对象
* @param obj Java对象
* @return 转换后的JSONArray对象
*/
public static JSONArray toJSONArray(Object obj) {
return (JSONArray) JSON.toJSON(obj);
}
}