Springboot单例模式实战封装json转换
一、定义
保证一个类仅有一个实例,并提供一个全局访问点.
二、优点
(1)在内存里只有一个实例,减少了内存开销
(2)可以避免对资源的多重占用
(3)设置全局访问点,严格控制访问 (对外不会new出来,只能通过这个方法创建对象)
三、缺点
没有接口,扩展困难.
四、举例实现,实际中常用
封装成转换json的类,传入一个对象,转换为json形式,就可以封装成一个util

最好的实现方式是枚举的实现方式。
一、枚举的实现方式:
@Slf4j
public enum EnumJacksonUtil { /**
* 方法集合
*/
INSTANCE { /**
* 转成json
* @param object 传入的实体类
* @return
*/
@Override
public String toJsonString(Object object) {
String json = null;
if (!StringUtils.isEmpty(object)) {
try {
log.info("传入对象:" + object);
json = mapper.writeValueAsString(object);
log.info("转换结果:" + json);
} catch (JsonProcessingException e) {
log.info("json转换异常{}" + object);
e.getMessage();
}
}
return json;
} /**
*
* @param jsonStr 传入的字符串
* @param cls 传入的实体类
* @return
*/
@Override
public <T> T stringToBean(String jsonStr, Class<T> cls) {
T t = null;
if (!StringUtils.isEmpty(mapper)) {
try {
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
t = mapper.readValue(jsonStr, cls);
} catch (IOException e) {
log.info("json转换异常{}" + jsonStr);
e.getMessage();
}
}
return t;
} /**
* 将json数据转换成pojo对象list
* @param jsonData
* @param beanType
* @param <T>
* @return
*/
@Override
public <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = mapper.readValue(jsonData, javaType);
return list;
} catch (Exception e) {
e.printStackTrace();
} return null;
}
}; /**
* springboot转换json的类
*/
private static ObjectMapper mapper; static {
mapper = new ObjectMapper();
} /**
* 转成json
*
* @param object 传入的实体类
* @return
*/
public abstract String toJsonString(Object object); /**
* 转成bean
*
* @param jsonStr 传入的字符串
* @param cls 传入的实体类
* @return
*/
public abstract <T> T stringToBean(String jsonStr, Class<T> cls); /**
* 将json数据转换成pojo对象list
*
* @param jsonData
* @param beanType
* @param <T>
* @return
*/
public abstract <T> List<T> jsonToList(String jsonData, Class<T> beanType); public static EnumJacksonUtil getInstance() {
return INSTANCE;
} }
测试方式:
@RunWith(SpringRunner.class)
@SpringBootTest
public class EnumApplicationTests { @Test
public void contextLoads() { Thermo thermo = new Thermo( );
thermo.setName("塞米菲");
thermo.setDescribe("一起一个"); EnumJacksonUtil enumJacksonUtil = EnumJacksonUtil.getInstance();
System.out.println( enumJacksonUtil.toJsonString(thermo));
} }
二、一般单例的实现方式
@Slf4j
public class JacksonUtil { private static ObjectMapper mapper; static {
//noinspection ConstantConditions
if (mapper == null) {
mapper = new ObjectMapper();
}
} /**
* 转成json
*
* @param object
* @return
*/
public static String toJsonString(Object object) {
String json = null;
if (object != null) {
try {
json = mapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
log.info("json转换异常{}" + object);
e.getMessage();
}
}
return json;
} /**
* 转成bean
*
* @param jsonStr
* @param cls
* @return
*/
public static <T> T stringToBean(String jsonStr, Class<T> cls) {
T t = null;
if (mapper != null) {
try {
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
t = mapper.readValue(jsonStr, cls);
} catch (IOException e) {
e.getMessage();
}
}
return t;
}
}
测试方法:
@Test
public void contextLoad2s() { Thermo thermo = new Thermo( );
thermo.setName("塞米菲");
thermo.setDescribe("一起一个"); System.out.println(JacksonUtil.toJsonString(thermo));
}
Springboot单例模式实战封装json转换的更多相关文章
- SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter
SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...
- SpringBoot之封装json对象返回json数据
/** * @description:封装json对象,所有返回结果都使用它 **/ public class Result<T> { private int code;// 业务自定义状 ...
- Springboot中redisTemplate乱码或json转换问题
问题1 用RedisTemplate存入map值的时候,用rdm可视化打开,看到的是转码之后的数据,如图: 存入的方法为: public boolean hmset(String key, Map&l ...
- Json转换工具类(基于google的Gson和阿里的fastjson)
在项目之中我们经常会涉及到字符串和各种对象的转换,为此特地整理了一下常用的转换方法 一.基于com.google.code.gson封装的json转换工具类 1. 在pom.xml文件里面引入gson ...
- springboot使用fastJson作为json解析框架
springboot使用fastJson作为json解析框架 springboot默认自带json解析框架,默认使用jackson,如果使用fastjson,可以按照下列方式配置使用 〇.搭建spri ...
- Json转换 在java中的应用
Json转换辅助类比较多,比如谷歌的Gson,阿里的FastJson,Jackson.net.sf.json等等 用了一圈后,本人还是比较推荐用net.sf.json 这里就介绍一下net.sf.js ...
- SpringBoot基础实战系列(一)整合视图
SpringBoot整合freemarker 1.添加依赖:springboot基本上是无缝衔接,基本上只需要添加对应的依赖,不需要或者做很少量的配置即可 注:对于springboot项目的创建此处不 ...
- SpringBoot基础实战系列(三)springboot单文件与多文件上传
springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...
- json转换成对象
在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在 ...
随机推荐
- 第8章 IO库 自我综合练习
要求: 文本内容: Tom 11144455 12345678998 Jone 88888888 99999999999 1.将文本文件中的内容读入,并显示到屏幕上: 2.手动输入“Mary 77 ...
- Pycharm配置支持vue语法
1. 2. 3. 4. 5.
- iptables实现端口转发实际案例
拓扑 client : 跳板机 外网:192.168.10.194 内网:10.1.1.1 内网mysql: 10.1.1.2 [root@test194 network-scripts]# cat ...
- python入门(九):目录操作
getcwd()当前目录路径 >>> import os>>> os.getcwd()'E:\\' chdir()切换目录>>> os.chdir ...
- Linux - Ubuntu 图形界面入门
Ubuntu 图形界面入门 目标 熟悉 Ubuntu 图形界面的基本使用 01. Ubuntu 的任务栏 02. 窗口操作按钮 03. 窗口菜单条 ——本文源自<黑马程序员>
- 小强学渲染之Unity Shader编程HelloWorld
第一个简单的顶点vert/片元frag着色器 1)打开Unity 5.6编辑器,新建一个场景后ctrl+s保存命名为Scene_5.默认创建的场景是包含了一摄像机,一平行光,且场景背景是一天空盒而 ...
- Ubuntu 增加swap空间大小
1. create a 1G file for the swap. sudo fallocate -l 1G /swapfile we can verify that the correct amou ...
- Android辅助开发工具合集
https://github.com/389273716/android-skill-summary/blob/master/开发工具使用指南/辅助开发工具.md
- project2
[概念] 要好好理解并且背下来记住 Java基础,呵呵呵.自己查吧. local host搞错了,整个跑不出来.真尴尬.不理解啊. static原来是全局的意思啊,好吧.以前都忘了,这次该记住了.st ...
- 【转载】python中not,and,or的优先级问题及用法
作业: >>> print(5<4 or 3)3>>> print(2>1 or 6)True>>> print(5>1 and ...