本文共 5255 字,大约阅读时间需要 17 分钟。
使用场景:
工作中,接口与接口交互时,常常会将json和bean/list相互转化,来处理。本文基于jackson来封装工具浩瀚的网络中,你我的相遇也是种缘分,看你天资聪慧、骨骼精奇,就送你一场大造化吧,能领悟多少就看你自己了。
如果没使用springboot的话,那么需要添加依赖,并初始化对象
com.fasterxml.jackson.core jackson-databind 2.10.4
如何在springboot中使用的,不用添加依赖,也可以不用自己实例化,使用spring容器已实例化的
(当然了不用ioc容器的,自己创建一个实列也无可厚非)objectMapper
,只要将对象交给容器管理,并注入对应的实列即可。
主要以下几个方法
package com.iworkh.test.restassured.utils;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;/** * json转化工具类 * * @author: iworkh-沐雨云楼 * @date: 2020-06-18 */public class JacksonTool { private static final Logger LOGGER = LoggerFactory.getLogger(JacksonTool.class); private final static ObjectMapper mapper; static { mapper = new ObjectMapper(); // 忽略json中在对象不存在对应属性 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略空bean转json错误 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); } /** * json转对象 * * @param jsonStr json串 * @param classType 对象类型 * @return 对象 */ public staticT toEntity(String jsonStr, Class classType) { if (StringUtils.isEmpty(jsonStr)) { LOGGER.warn("Json string {} is empty!", classType); return null; } try { return mapper.readValue(jsonStr, classType); } catch (IOException e) { LOGGER.error("json to entity error.", e); } return null; } /** * json转化为带泛型的对象 * * @param jsonStr json字符串 * @param typeReference 转化类型 * @return 对象 */ public static T toEntity(String jsonStr, TypeReference typeReference) { if (StringUtils.isBlank(jsonStr) || typeReference == null) { return null; } try { return (T) mapper.readValue(jsonStr, typeReference); } catch (JsonProcessingException e) { LOGGER.error("json to entity error.", e); } return null; } /** * 对象转json * * @param obj 对象 * @return json串 */ public static String toJson(Object obj) { if (obj instanceof String) { return (String) obj; } try { return mapper.writeValueAsString(obj); } catch (IOException e) { LOGGER.error("obj to json error.", e); } return null; } /** * 对象转json(格式化的json) * * @param obj 对象 * @return 格式化的json串 */ public static String toJsonWithFormat(Object obj) { if (obj == null) { return null; } if (obj instanceof String) { return (String) obj; } try { return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); } catch (IOException e) { LOGGER.error("obj to json error.", e); } return null; }}
使用很简单,主要注意下泛型对象的转化使用 new TypeReference<List<UserVo>>() {})
public class JacksonToolTest { @Test public void testEntityToJson() { String[] hobbies = { "football", "sing"}; UserVo user = new UserVo(1, "iworkh", System.currentTimeMillis(), false, Arrays.asList(hobbies)); String json = JacksonTool.toJson(user); System.out.println(json); } @Test public void testJsonToEntity() { String json = "{\"id\":1,\"name\":\"iworkh\",\"birthday\":1592575139578,\"vip\":false,\"hobbies\":[\"football\",\"sing\"]}"; UserVo userVo = JacksonTool.toEntity(json, UserVo.class); if (userVo != null) { System.out.println(userVo.getName()); } } @Test public void testListEntityToJson() { String[] hobbies = { "football", "sing"}; UserVo user1 = new UserVo(1, "iworkh1", System.currentTimeMillis(), false, Arrays.asList(hobbies)); UserVo user2 = new UserVo(2, "iworkh2", System.currentTimeMillis(), false, Arrays.asList(hobbies)); ArrayListlist = new ArrayList<>(); list.add(user1); list.add(user2); String json = JacksonTool.toJson(list); System.out.println(json); } @Test public void testJsonToListEntity() { String json = "[{\"id\":1,\"name\":\"iworkh1\",\"birthday\":1592575376189,\"vip\":false,\"hobbies\":[\"football\",\"sing\"]}," + "{\"id\":2,\"name\":\"iworkh2\",\"birthday\":1592575376189,\"vip\":false,\"hobbies\":[\"football\",\"sing\"]}]"; List userList = JacksonTool.toEntity(json, new TypeReference
>() { }); userList.forEach(item -> { System.out.println(item.getName()); }); }}
能读到文章最后,首先得谢谢您对本文的肯定,你的肯定是对我们的最大鼓励。
你觉本文有帮助,那就点个👍
你有疑问,那就留下您的💬 怕把我弄丢了,那就把我⭐ 电脑不方便看,那就把发到你📲转载地址:http://lzhws.baihongyu.com/