博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java工具类-jackson
阅读量:4304 次
发布时间:2019-05-27

本文共 5255 字,大约阅读时间需要 17 分钟。

使用场景:

工作中,接口与接口交互时,常常会将json和bean/list相互转化,来处理。本文基于jackson来封装工具

浩瀚的网络中,你我的相遇也是种缘分,看你天资聪慧、骨骼精奇,就送你一场大造化吧,能领悟多少就看你自己了。

1.说明

如果没使用springboot的话,那么需要添加依赖,并初始化对象

com.fasterxml.jackson.core
jackson-databind
2.10.4

如何在springboot中使用的,不用添加依赖,也可以不用自己实例化,使用spring容器已实例化的objectMapper,只要将对象交给容器管理,并注入对应的实列即可。

(当然了不用ioc容器的,自己创建一个实列也无可厚非)

2.工具类

主要以下几个方法

  • json转对象
  • 对象转json(json格式化)
  • json转化为泛型类型对象(集合等泛型方式)
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 static
T 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; }}

3.调用

使用很简单,主要注意下泛型对象的转化使用 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)); ArrayList
list = 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()); }); }}

4.推荐

能读到文章最后,首先得谢谢您对本文的肯定,你的肯定是对我们的最大鼓励。

你觉本文有帮助,那就点个👍

你有疑问,那就留下您的💬
怕把我弄丢了,那就把我⭐
电脑不方便看,那就把发到你📲

转载地址:http://lzhws.baihongyu.com/

你可能感兴趣的文章
python3安装scrapy
查看>>
python正则表达式入门一
查看>>
python正则表达式入门二
查看>>
scrapy运行
查看>>
XPATH入门
查看>>
python爬虫 CSS选择器
查看>>
正常关闭java程序
查看>>
查看linux核心数
查看>>
数据结构与算法三: 数组
查看>>
Activiti工作流会签二 启动流程
查看>>
Activiti工作流会签三 撤销,审批,驳回
查看>>
Oauth2方式实现单点登录
查看>>
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>