Jackson工具类及其配置
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工具类及其配置的更多相关文章
- Java json工具类,jackson工具类,ObjectMapper工具类
Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...
- javaweb常用工具类及配置文件备份
Javaweb常用工具类及配置文件备份 做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /* * hibernate获取sessi ...
- Java工具类——通过配置XML验证Map
Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...
- Jackson 工具类使用及配置指南
目录 前言 Jackson使用工具类 Jackson配置属性 Jackson解析JSON数据 Jackson序列化Java对象 前言 Json数据格式这两年发展的很快,其声称相对XML格式有很对好处: ...
- Jackson工具类使用及配置指南、高性能配置(转)
Jackson使用工具类 通常,我们对JSON格式的数据,只会进行解析和封装两种,也就是JSON字符串--->Java对象以及Java对象--->JSON字符串. public class ...
- jackson工具类 对象转字符串 -- 字符串转对象
这个一个json的工具类.用的是jackson,当然还有谷歌的gosn,阿里的fastjson ,但是jackson的感觉还是最成熟(网上大神说的...) 实现的功能很简单,对象转字符串 字符串转简 ...
- springMVC+redis+redis自定义工具类 的配置
1. maven项目,加入这一个依赖包即可, <dependency> <groupId>redis.clients</groupId> <artifactI ...
- 使用jackson工具类把对象或集合转为JSON格式
jackson使用方法: 1.加入jar包: jackson-annotations-2.2.2.jar jackson-core-2.2.2.jar jackson-databind-2.2.2.j ...
- Jackson工具类(各种转换)
首先要在项目中引入jackson的jar包(在此不做说明) 下面直接上代码 public class JacksonUtils { private final static ObjectMapper ...
- com.fasterxml.jackson工具类
老版本的Jackson使用的包名为org.codehaus.jackson,而新版本使用的是com.fasterxml.jackson. Jackson主要包含了3个模块: jackson-core ...
随机推荐
- unity 调试 packages
package中代码vs无法f12跳转 解决方法 1 把包copy出来 2 Package Manager->Add package from disk 3 选择包文件中的package.jso ...
- yii框架中 不能正确正常使用phpredis 路径安装好后还是报 Class yii\redis\Connection does not exist!
1,成功解决方案 在yiisoft / extensions.php 中添加如下数组 指向目录 'yiisoft/yii2-redis' =>array( 'name'=>'yi ...
- Kubernetes基础配置管理
一.ConfigMap创建 1-1.基于目录创建ConfigMap 首先创建一个configmap/conf存储目录,分别建立.conf文件 mkdir /configmap/conf #创建.con ...
- 洛谷 P4454 [CQOI2018]破解D-H协议
题目 https://www.luogu.com.cn/problem/P4454 杂题乱做ing... 思路 首先我们把式子列一下: \(g^a\equiv A(mod P)\) \(g^b\equ ...
- git stash (pycharm/vscode的gui演示)
git stash (pycharm/vscode的gui演示) 场景 代码刚写到一半,发现线上bug需要马上修改部署上线 此时手头的代码写一半,提交根本跑不动甚至影响原来的业务了 回滚就白瞎搬了好几 ...
- PAT-basic-1022 D进制的A+B java
一.题目 输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: ...
- 【Qt】汇总Qt坑若干
1..pro里添加了类以后调用时还是报错? solution:注意添加或者修改以后要保存保存保存,否则Qt是不会自己更新的! 2.在ui界面修改了类的成员名,保存了以后.cpp里调用,成员名还是不更新 ...
- shell_Day02
虽然差了不少天,但的确是第......一天 history 查看历史命令记录 !命令序号 查看命令并执行 -c 清空 关于命令历史的文件 关于命令历史的变量(环境变量) 命令补全 tab:制表符 \t ...
- Study python_02
分支结构 简单的使用if语句 使用if-else import random# 调用一个随机数包(只看if的情况可忽略) n1 = random.randrange(100) n2 = random. ...
- vue后台管理系统——权限管理模块
电商后台管理系统的功能--权限管理模块 1. 权限管理业务分析 通过权限管理模块控制不同的用户可以进行哪些操作,具体可以通过角色的方式进行控制,即每个用户分配一个特定的角色,角色包括不同的功能权限. ...