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在 ...
随机推荐
- [PHP] 常备的现代 PHP 项目开发准备
[ Windows 开发环境 ] phpStudy(http://phpstudy.php.cn/) 现在一般选择版本: php7.1 + nginx,常用 curl.openssl 扩展选择打开. ...
- spring boot常用注解小计
@Async 需要执行异步方法时,在方法上加上@Async之后,底层使用多线程技术 .启动类上需要加上 @EnableAsync 注意:异步执行方法,不能与引用方法同在一个类里 @Transactio ...
- servlet的继承关系
一.servlet的继承关系 1.servlet程序是sun公司开发用于web资源技术,任何一个类只需要实现了servlet接口,那么就可以成为servlet程序 2.继承体系: ---------- ...
- 认识border
标签(空格分隔): border border的认识: border:边框的意思,描述盒子的边框,边框有三个要素: 粗细, 线性样式 ,颜色: <!DOCTYPE html> <ht ...
- React Router的Route的使用
Route 是 React Router中用于配置路由信息的组件,每当有一个组件需要根据 URL 决定是否渲染时,就需要创建一个 Route. 1) path 每个 Route 都需要定义一个 pat ...
- mysql学习笔记--数据库索引
一.索引的优点:查询速度快 二.索引的缺点: 1. 增.删.改(数据操作语句)效率低了 2. 索引占用空间 三.索引类型: 1. 普通索引 2. 唯一索引(唯一键) 3. 主键索引:只要主键就自动创建 ...
- 认识socket
socket socket也称套接字,网络编程的基础.一般情况下我不喜欢直接去说socket的函数都是怎么用的,那个很多人都写出来了,而且肯定比我好的有的是. 但是今天想写的是我的理解中,产生sock ...
- sql语句order by排序问题
根据某个字段的值排序,等于这个值的放最前面,不等的放后面 select * from [DTS_Interface] order by case when from_tag_name='木质饰条' t ...
- STL基础复习
stl容器:vector,deque,list,map/multimap,set 特殊容器:stack,queue,priority_queue 通用操作 size() 返回当前容器元素数量 emp ...
- 面向对象的 __slots__
优点: 1. __slots__ 能够减小内存的占用,限制对象只能有这几个属性,再加属性会报错 . 副作用: 1. 设置了__slots__之后,实例对象就没有__dict__了 2. __slots ...