import com.fasterxml.jackson.databind.JAVAType;import com.fasterxml.jackson.databind.ObjectMapper;import lombok.extern.slf4j.Slf4j;import org.codehaus.jackson.type.TypeReference;import org.springframework.util.StringUtils;import java.io.IOException;import java.util.ArrayList;import java.util.List;/** * @author: Longer * @date: 2020/8/23 * @description: Jackson转换工具类 */@Slf4jpublic class JacksonUtil {private static ObjectMapper objectMapper = new ObjectMapper();/*** 对象转换成json** @param obj* @param <T>* @return*/public static <T> String beanToJson(T obj) {if (obj == null) {return null;}try {return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);} catch (Exception e) {log.error("beanToJson error", e);e.printStackTrace();return null;}}/*** 将JSON字符串根据指定的Class反序列化成Java对象 。** @param jsonJSON字符串* @param pojoClass Java对象Class* @return 反序列化生成的Java对象* @throws Exception 如果反序列化过程中发生错误,将抛出异常*/public static Object decode(String json, Class<?> pojoClass)throws Exception {try {return objectMapper.readValue(json, pojoClass);} catch (Exception e) {throw e;}}/*** 将JSON字符串根据指定的Class反序列化成Java对象 。** @param jsonJSON字符串* @param reference 类型引用* @return 反序列化生成的Java对象* @throws Exception 如果反序列化过程中发生错误,将抛出异常*/public static Object decode(String json, TypeReference<?> reference) throws Exception {try {return objectMapper.readValue(json, reference.getClass());} catch (Exception e) {throw e;}}/*** 将Java对象序列化成JSON字符串 。** @param obj 待序列化生成JSON字符串的Java对象* @return JSON字符串* @throws Exception 如果序列化过程中发生错误,将抛出异常*/public static String encode(Object obj) throws Exception {try {return objectMapper.writeValueAsString(obj);} catch (Exception e) {throw e;}}/*** 对象转换成格式化的json** @param obj* @param <T>* @return*/public static <T> String beanToJsonPretty(T obj) {if (obj == null) {return null;}try {return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);} catch (Exception e) {log.error("beanToJsonPretty error", e);e.printStackTrace();return null;}}/*** 将json转换成对象Class** @param str* @param clazz* @param <T>* @return*/public static <T> T jsonToBean(String str, Class<T> clazz) {if (StringUtils.isEmpty(str) || clazz == null) {return null;}try {return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);} catch (Exception e) {log.error("jsonToBean error", e);e.printStackTrace();return null;}}/*** 将json转换为对象集合** @param str* @param clazz* @param <T>* @return*/public static <T> List<T> jsonToBeanList(String str, Class<T> clazz) {if (StringUtils.isEmpty(str) || clazz == null) {return null;}JavaType javaType = getCollectionType(ArrayList.class, clazz);try {return objectMapper.readValue(str, javaType);} catch (IOException e) {log.error("jsonToBeanList error", e);e.printStackTrace();return null;}}public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);}}
推荐阅读
- 电脑微信如何实现多开?
- 高校|1076万“打工人”即将进职场,如何实现就业?这个方向值得考虑
- 华为S5700设置acl,实现vlan三层隔离,让你小白变大神,转发收藏
- 百度C++工程师如何实现极致并发优化
- 教程 在浏览器中实现IPFS连接的指引
- Vue中使用v-viewer组件实现图片预览功能,支持Vue3
- jenkins+Acunetix实现自动化安全测试
- mac如何安装sz,rz,实现本地和服务器文件传输「开发效率工具」
- 一文看懂智慧城市建设,AI算法如何实现赋能?
- django 编写数据接口
