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 ...
 
随机推荐
- Python学习:Mysql(三)索引
			
1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引种类 普通索引:仅加速查询 唯一索引:加速查询 + 列值唯一(可以有 ...
 - 【C++复习】第九章 模板与群体数据(2)
			
学习重点:容器类型内部的实现机制,顺便复习前面各章内容.容器类型的具体实现不需要特别关注(目前不需要会裸手写这么一个容器类型) 1.群体/线性群体 群体的概念 群体是指由多个数据元素组成的集合体.群体 ...
 - mysql ID起始值重置方法
			
方法一,执行SQL:truncate table `table_name`; 这种方法好处是运行速度超快 方法二,执行如下SQL: (还是假定表名是test)delete from `table_na ...
 - 手动收集oracle的统计信息脚本及相关操作
			
我们一般习惯使用oracle自带的统计信息收集,但很多时候我们会发现,有很多关键的表始终没有被收集过. connect 用户/密码grant create any table to 用户;-- 这一步 ...
 - js已知多边形坐标点,求多边形的中心点坐标
			
你需要传入的数据类型如下: // 取面对象 中心点 var calculateCenter = function (lnglatarr) { var total = lnglatarr.length; ...
 - 杭电oj 求数列的和
			
Problem Description 数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和. Input 输入数据有多组,每组占一行,由两个整数n(n<10000 ...
 - Git ignore 失效 忽略已经提交推送远程的文件不生效
			
因为这个文件已经被纳入版本管理中了 所以需要删掉. 1.先把需要忽略的文件暂存下来.再到.gitignore 添加要忽略的文件的路径 2.再删除本地的缓存 在 git bash 执行 git rm - ...
 - 整合mybatis实现简单的增删改查
			
mybatis配置相关代码 配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE conf ...
 - JS篇(003)-请用 js 去除字符串空格?
			
答案:replace 正则匹配方法.str.trim()方法.JQ 方法:$.trim(str)方法 解析: 方法一:replace 正则匹配方法 去除字符串内所有的空格:str = str.repl ...
 - 快速搭建一个spring cloud 子模板--好记性不如烂笔头
			
建 application.yml 文件 server: # 服务端口号 port: 7609spring: application: # 服务名称 - 服务之间使用名称进行通讯 name: serv ...