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在 ...
随机推荐
- React-Native:解决真机调试时候Could not get BatchedBridge, make sure your bundle is packaged properly
问题一:用真机通过USB连接电脑调试的时候报如下错:Could not get BatchedBridge, make sure your bundle is packaged properly,如图 ...
- Dear Menuhin
2017-11-26 Sa Nov 11:05 AM @ HOME, TOSBE Nicole assigned us a composition about the Thanksgiving day ...
- Lock和Static使用说明和区别
private static object lockInsertObj = new object(); lock (lockInsertObj){--写代码} 1.静态方法与非静态方法 a.静态方法的 ...
- tensorflow 查看模型输入输出saved_model_cli show --dir ./xxxx --all
saved_model_cli show --dir ./xxxxxxxx --all 可以查看模型的输入输出,比如使用tensorflow export_model_inference.py 输出的 ...
- ThingJS平台制作第一人称视角下的巡更效果
今天想要做一个类似巡更的过程,就像是在学校保安巡更,小区保安巡更一样.巡更需要用到相应的场景,比如说:园区.学校.超市以及工厂等等,然后需要规划好路线也就是巡更的路线,并且视角要跟随路线来变换,从而达 ...
- C#解析JSON字符串总结(转载)
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
- MySQL实现批量检查表并进行repair与optimize的方法
这篇文章主要介绍了MySQL实现批量检查表并进行repair与optimize的方法,结合实例形式分析了MySQL批量修复与优化表的相关技巧,需要的朋友可以参考下 本文实例讲述了MySQL实现批量检查 ...
- RSA总结
面试问到RSA了,大脑有些空白,查漏补缺吧 什么是RSA RSA算法是一种非对称的加密算法,所谓非对称,就是指算法需要一对密钥,使用其中一个加密,则需要另一个才能解密.密钥分为公钥和私钥,私钥自己保存 ...
- 探究编译后,try-with-resources括号中的object是否关闭,以及两种写法编译后的对比
源码(@TargetApi(Build.VERSION_CODES.KITKAT)) public List<T> test1() { String sql = "selxe x ...
- Django Rest Framework 视图和路由
Django Rest Framework 视图和路由 DRF的视图 APIView 我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们 ...