1 package com.ruoyi.common.core.utils.json;
2
3 import com.fasterxml.jackson.annotation.JsonAutoDetect;
4 import com.fasterxml.jackson.annotation.JsonInclude;
5 import com.fasterxml.jackson.annotation.JsonTypeInfo;
6 import com.fasterxml.jackson.annotation.PropertyAccessor;
7 import com.fasterxml.jackson.core.JsonParser;
8 import com.fasterxml.jackson.core.JsonProcessingException;
9 import com.fasterxml.jackson.core.json.JsonReadFeature;
10 import com.fasterxml.jackson.core.type.TypeReference;
11 import com.fasterxml.jackson.databind.DeserializationFeature;
12 import com.fasterxml.jackson.databind.ObjectMapper;
13 import com.fasterxml.jackson.databind.SerializationFeature;
14 import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
15 import com.fasterxml.jackson.databind.node.ObjectNode;
16 import com.ruoyi.common.core.exception.BusinessException;
17 import com.ruoyi.common.core.exception.param.UtilException;
18 import lombok.extern.slf4j.Slf4j;
19
20 import java.text.SimpleDateFormat;
21 import java.util.List;
22 import java.util.Map;
23
24 /**
25 * @Description : json工具类
26 * @Author : wzkris
27 * @Version : V1.0.0
28 * @Date : 2023/1/2 8:37
29 */
30 @Slf4j
31 public class JsonUtils {
32
33
34 private static ObjectMapper MAPPER = new ObjectMapper();
35
36 static {
37 //序列化的时候序列对象的所有属性
38 MAPPER.setSerializationInclusion(JsonInclude.Include.ALWAYS);
39 //取消默认转换timestamps形式
40 MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
41 //忽略空Bean转json的错误
42 MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
43 //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss
44 MAPPER.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
45 //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误
46 MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
47 //是否允许使用注释
48 MAPPER.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
49 //允许转义字符
50 MAPPER.configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), true);
51 //不输出空值字段
52 MAPPER.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
53 //定义识别码在反序列化时是否保留
54 MAPPER.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
55 //指定java序列化类型,否则会按默认LinkedHashMap序列化
56 MAPPER.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
57 ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
58 }
59
60 private JsonUtils() {
61 }
62
63
64
65 public static ObjectMapper getMapper() {
66 return MAPPER;
67 }
68
69 /**
70 * 对象转Json格式字符串
71 *
72 * @param obj 对象
73 * @return Json格式字符串
74 */
75 public static String toJsonString(Object obj) {
76 try {
77 return MAPPER.writeValueAsString(obj);
78 } catch (Exception e) {
79 log.error("convert error, errorMsg:{}", e.getMessage(), e);
80 throw new BusinessException(e.getMessage());
81 }
82 }
83
84
85 /**
86 * 对象转字节
87 *
88 * @param obj 对象
89 * @return 字节流
90 */
91 public static byte[] toBytes(Object obj) {
92 try {
93 return MAPPER.writeValueAsBytes(obj);
94 } catch (JsonProcessingException e) {
95 log.error("convert error, errorMsg:{}", e.getMessage(), e);
96 throw new UtilException("JsonUtils工具类转换异常");
97 }
98 }
99
100
101 /**
102 * Json 转为 Jave Bean
103 *
104 * @param text json字符串
105 * @param clazz 对象类型class
106 * @param <T> 对象类型
107 * @return 对象类型
108 */
109 public static <T> T parse(String text, Class<T> clazz) {
110 try {
111 return MAPPER.readValue(text, clazz);
112 } catch (Exception e) {
113 log.error("convert error, errorMsg:{}", e.getMessage(), e);
114 throw new UtilException("JsonUtils工具类转换异常");
115 }
116 }
117
118
119 /**
120 * @param text json字符串
121 * @return 转为ObjectNode
122 */
123 public static ObjectNode parse(String text) {
124 try {
125 return MAPPER.readValue(text, ObjectNode.class);
126 } catch (JsonProcessingException e) {
127 log.error("convert error, errorMsg:{}", e.getMessage(), e);
128 throw new UtilException("JsonUtils工具类转换异常");
129 }
130 }
131
132 /**
133 * Json 转为 Map
134 *
135 * @param text json
136 * @param <K> key
137 * @param <V> value
138 * @return map
139 */
140 public static <K, V> Map<K, V> toMap(String text) {
141 try {
142 return MAPPER.convertValue(text, new TypeReference<Map<K, V>>() {
143 });
144 } catch (Exception e) {
145 log.error("convert error, errorMsg:{}", e.getMessage(), e);
146 throw new UtilException("JsonUtils工具类转换异常");
147 }
148 }
149
150
151 /**
152 * Json 转 List, Class 集合中泛型的类型,非集合本身
153 *
154 * @param text json
155 * @param <T> 对象类型
156 * @return List
157 */
158 public static <T> List<T> toList(String text) {
159 try {
160 return MAPPER.convertValue(text, new TypeReference<List<T>>() {
161 });
162 } catch (Exception e) {
163 log.error("convert error, errorMsg:{}", e.getMessage(), e);
164 throw new UtilException("JsonUtils工具类转换异常");
165 }
166 }
167
168 }

Jackson工具类及其配置的更多相关文章

  1. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

  2. javaweb常用工具类及配置文件备份

    Javaweb常用工具类及配置文件备份   做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /*  * hibernate获取sessi ...

  3. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  4. Jackson 工具类使用及配置指南

    目录 前言 Jackson使用工具类 Jackson配置属性 Jackson解析JSON数据 Jackson序列化Java对象 前言 Json数据格式这两年发展的很快,其声称相对XML格式有很对好处: ...

  5. Jackson工具类使用及配置指南、高性能配置(转)

    Jackson使用工具类 通常,我们对JSON格式的数据,只会进行解析和封装两种,也就是JSON字符串--->Java对象以及Java对象--->JSON字符串. public class ...

  6. jackson工具类 对象转字符串 -- 字符串转对象

    这个一个json的工具类.用的是jackson,当然还有谷歌的gosn,阿里的fastjson ,但是jackson的感觉还是最成熟(网上大神说的...) 实现的功能很简单,对象转字符串  字符串转简 ...

  7. springMVC+redis+redis自定义工具类 的配置

    1. maven项目,加入这一个依赖包即可, <dependency> <groupId>redis.clients</groupId> <artifactI ...

  8. 使用jackson工具类把对象或集合转为JSON格式

    jackson使用方法: 1.加入jar包: jackson-annotations-2.2.2.jar jackson-core-2.2.2.jar jackson-databind-2.2.2.j ...

  9. Jackson工具类(各种转换)

    首先要在项目中引入jackson的jar包(在此不做说明) 下面直接上代码 public class JacksonUtils { private final static ObjectMapper ...

  10. com.fasterxml.jackson工具类

    老版本的Jackson使用的包名为org.codehaus.jackson,而新版本使用的是com.fasterxml.jackson. Jackson主要包含了3个模块: jackson-core ...

随机推荐

  1. CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

    1.npm install -g increase-memory-limit 2.increase-memory-limit 3.重启解决

  2. Centos 7.5 MySql的安装和配置

    一.安装 三个步骤: wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum -y ins ...

  3. 8.golang语言学习,运算符介绍

    1.算术运算 自增,自减,只能单独使用,++,--只能写在变量后面 2.赋值运算符 优先级,单目运算,赋值运算从右到左运算,其余从左到右,无三目运算,用if实现 3.比较运算符/关系 4.逻辑运算符 ...

  4. jmeter非GUI模式运行-分布式测试

    上一篇文章我们说到了jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存.cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对j ...

  5. python3.7 sorted 自定义排序

    from functools import cmp_to_keyls=['9','23','3','56','78']sorted(ls, key=cmp_to_key(lambda x, y: in ...

  6. Miller-Rabin素性判定算法

    Miller-Rabin素性判定算法是一种基于概率的判定算法,每次判定n是素数的正确性概率至少为75%,出错的概率小于25%. 如果对n进行k次素性检测,如果结果n为素数,那么n为合数的概率为1/(4 ...

  7. 由浇花工具开始IOT物联网平台之开始前言篇【1】

    在2020年时,突然有个想法,就是做个浇花工具,因为平时喜欢养花,有时忘记浇花,有时感觉手动浇花太麻烦,所以做个这个小玩意,是用.NET 开发的WinForm小程序,来控制单片机,带动水泵浇花,还可以 ...

  8. 项目启用eslint 检测工具

    在日常开发中,一个大点的项目会有多人参与,那么可能就会出现大家的代码风格不一,各显神通,这个时候就要祭出我们的eslint. 在这之前磨刀不误砍柴工,我们先来配置一下我们的代码编辑工具,如何在vsco ...

  9. postman收藏 -大佬玩法。

    请求顺序:    https://www.cnblogs.com/superhin/p/11454832.html 在Postman脚本中发送请求(pm.sendRequest) : https:// ...

  10. c++学习9 结构体

    一 结构体赋值 结构体赋值的方法有三种,逐个成员赋值,整体赋值和拷贝赋值. 设一个结构体有struck student{ int age;char ch[32]; }: 逐个成员赋值:student ...