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在 ...
随机推荐
- Spring_Four -- 团队项目设计完善&编码测试
团队项目设计完善&编码测试 1.文档<软件设计方案说明书>github地址:https://github.com/gzyt/SRS 2.项目集成开发环境 数据库:Mysql 5.0 ...
- png 变透明
using System.Drawing Image image; image = Image.FromFile("d:\\1.png"); Bitmap bitma ...
- JQUERY之表单验证案例
<!-- 需求: 用户注册页面要有用户名.密码.确认密码.邮箱 用户名文本框:用户名不能为空,且必须为数字与字母的6到12位的组合 密码框:密码不能为空,六到八位数字或字母的组合 确认密码框:确 ...
- 【搬运】 Page Object 官方文档 (新增了Widget特性)
Appium Java client has facilities which components to [Page Object](https://github.com/SeleniumHQ/se ...
- 网络通信实验(1)STM32F4 以太网简介
STM32F4 以太网简介 STM32F407 芯片自带以太网模块,该模块包括带专用 DMA 控制器的 MAC 802.3(介质访问控制)控制器,支持介质独立接口 (MII) 和简化介质独立接口 (R ...
- 作业四:个人项目-小学四则运算之JAVA版
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186 代码所在的github远程仓库的地址:https://git ...
- commandjs、AMD、CMD之间的故事
commandjs:同步加载,只运行一次,后面使用第一次加载时运行的结果(存于缓存中),用于服务器 AMD:define(id ?,dependencies ?,factory) 异步加载,用于浏览器 ...
- 《Java从入门到精通》学习总结4
1. 程序运行期间,大部分数据都在内存中进行操作,当程序结束时,这些数据将消失. 如果需要将数据永久保存,可使用文件输入流 / 文件输出流与指定的文件建立连接,将需要的数据永久保存到文件中. File ...
- NoteBook学习(二)-------- Zeppelin简介与安装
Zeppelin官网地址: http://zeppelin.apache.org/ Github地址: https://github.com/apache/zeppelin (参照官网) 1.什么是z ...
- angular中如果几个请求相互不依赖,但是请求结果需要一起处理,可以使用