【Springboot】FastJson与Jackson全局序列化方式的配置和相关工具类
springboot 版本:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
FastJson版本:
<!--fastJson库-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
Jackson的序列化方式:
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer { /**
* 配置Jackson的序列化方式
* @param converters
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
converter.setObjectMapper(objectMapper);
converters.add(converter);
converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8));
}
}
FastJson的序列化方式:
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer { /**
* fastjson的全局序列化方式
* @param converters
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// 1、需要先定义一个·convert转换消息的对象;
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
// 2、添加fastjson的配置信息,比如 是否要格式化返回json数据
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
// 3、在convert中添加配置信息.
fastConverter.setFastJsonConfig(fastJsonConfig);
// 4、将convert添加到converters当中.
converters.add(fastConverter);
}
}
序列化 工具类
Jackson工具类
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows; import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors; /**
* @author: Sam.yang
* @date: 2020/9/15 11:41
* @desc: Jackson 解析器
*/
@NoArgsConstructor
public class JacksonUtil { /**
* 单个对象复制
*/
@SneakyThrows
public static <F, T> T copy(F from, Class<T> destCls) {
if (from == null) {
return null;
} if (from.getClass().equals(destCls)) {
return (T) from;
}
ObjectMapper mapper = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
return mapper.readValue(mapper.writeValueAsString(from), destCls);
} /**
* 集合复制
*/
public static <F, T> List<T> copyList(List<F> from, Class<T> destCls) {
if (CollectionUtils.isEmpty(from)) {
return Collections.<T>emptyList();
}
if (from.get(0).getClass().equals(destCls)) {
return (List<T>) from;
}
return from.stream().map(f -> copy(f, destCls)).collect(Collectors.toList());
} /**
* Page复制
*/
public static <F, T> IPage<T> copyPage(IPage<F> from, Class<T> destCls) {
IPage<T> to = new Page<>();
if (null != from) {
to.setCurrent(from.getCurrent());
to.setPages(from.getPages());
to.setSize(from.getSize());
to.setTotal(from.getTotal());
List<T> dls = Lists.newArrayList();
if (!CollectionUtils.isEmpty(from.getRecords())) {
dls = from.getRecords().stream().map(f -> copy(f, destCls)).collect(Collectors.toList());
}
to.setRecords(dls);
}
return to;
} /**
* Page复制到集合 这里用的是mybatisplus分页
*/
public static <F, T> List<T> copyPageToList(IPage<F> from, Class<T> destCls) {
List<T> dls = Lists.newArrayList();
if (null != from) {
if (!CollectionUtils.isEmpty(from.getRecords())) {
dls = from.getRecords().stream().map(f -> copy(f, destCls)).collect(Collectors.toList());
}
}
return dls;
}
}
FastJson序列化工具类
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.ValueFilter;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists; import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors; public class BeanCopyUtil {
private BeanCopyUtil() { }
//单个对象复制
public static <F, T> T copy(F from, Class<T> destCls) {
if (from == null) {
return null;
} if (from.getClass().equals(destCls)) {
return (T) from;
}
return JSON.parseObject(JSON.toJSONString(from), destCls);
}
private static ValueFilter filter = (obj, s, v) -> {
if (v == null)
return "";
return v;
}; //集合复制
public static <F, T> List<T> copyList(List<F> from, Class<T> destCls) {
if (CollectionUtils.isEmpty(from)) {
return Collections.<T>emptyList();
}
if (from.get(0).getClass().equals(destCls)) {
return (List<T>) from;
}
return from.stream().map(f -> copy(f, destCls)).collect(Collectors.toList());
}
//Page复制
public static <F, T> IPage<T> copyPage(IPage<F> from, Class<T> destCls) {
IPage<T> to = new Page<>();
if (null != from){
to.setCurrent(from.getCurrent());
to.setPages(from.getPages());
to.setSize(from.getSize());
to.setTotal(from.getTotal());
List<T> dls = Lists.newArrayList();
if (!CollectionUtils.isEmpty(from.getRecords())) {
dls = from.getRecords().stream().map(f -> copy(f, destCls)).collect(Collectors.toList());
}
to.setRecords(dls);
}
return to;
}
//Page复制到集合
public static <F, T> List<T> copyPageToList(IPage<F> from, Class<T> destCls) {
List<T> dls = Lists.newArrayList();
if (null != from){
if (!CollectionUtils.isEmpty(from.getRecords())) {
dls = from.getRecords().stream().map(f -> copy(f, destCls)).collect(Collectors.toList());
}
}
return dls;
}
}
【Springboot】FastJson与Jackson全局序列化方式的配置和相关工具类的更多相关文章
- SpringBoot项目使用RedisTemplate设置序列化方式
前端时间新项目使用SpringBoot的RedisTemplate遇到一个问题,先简单描述一下问题:不同项目之间redis共用一个,但是我们新项目读不到老项目存储的缓存.新项目搭建的时候没有跟老项目使 ...
- 授权过期后AJAX操作跳转到登录页的一种全局处理方式
前两天园友JustRun分享了一篇 <菜鸟程序员之Asp.net MVC Session过期异常的处理>博文,正好自己前段时间被安排处理过这个问题,发现JustRun的方法有一点点可优化的 ...
- SpringBoot修改Redis序列化方式
前言 由于Springboot默认提供了序列化方式并不是非常理想,对于高要求的情况下,序列化的速度和序列化之后大小有要求的情况下,不能满足,所以可能需要更换序列化的方式. 这里主要记录更换序列化的方式 ...
- springboot系列十一、redisTemplate和stringRedisTemplate对比、redisTemplate几种序列化方式比较
一.redisTemplate和stringRedisTemplate对比 RedisTemplate看这个类的名字后缀是Template,如果了解过Spring如何连接关系型数据库的,大概不会难猜出 ...
- 三种序列化方式存取redis的方法
常见的的序列化反序列方式的效率: protoBuf(PB) > fastjson > jackson > hessian > xstream > java 数据来自于:h ...
- Redis 序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer
当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的.RedisTemplate默认使用的是JdkSerializat ...
- Springboot 关于日期时间格式化处理方式总结
项目中使用LocalDateTime系列作为DTO中时间的数据类型,但是SpringMVC收到参数后总报错,为了配置全局时间类型转换,尝试了如下处理方式. 注:本文基于Springboot2.x测试, ...
- SpringBoot整合reids之JSON序列化文件夹操作
前言 最近在开发项目,用到了redis作为缓存,来提高系统访问速度和缓解系统压力,提高用户响应和访问速度,这里遇到几个问题做一下总结和整理 快速配置 SpringBoot整合redis有专门的场景启动 ...
- JSON 解析 (三)—— FastJSON与Jackson比较
一.方便性与性能 调用方便性而言: FastJSON提供了大量静态方法,调用简洁方便 Jackson须实例化类,调用相对繁琐,可通过封装成JSON工具类简化调用 性能而言: FastJSON反序列化的 ...
随机推荐
- E: Some index files failed to download. They have been**
转: E: Some index files failed to download. They have been** 问题描述: 当使用Dockerfile从包含cuda的镜像建立新的image的时 ...
- 如何在netcore下,愉快的使用IServiceProvider
之前一直做dotnet framework开发,依赖注入使用Autofac,Autofac的一般用法是服务启动时,将用到的接口.实现类名注入进去, 然后在服务其他地方如果使用该类时,直接在Contai ...
- c++:一个辅助类让内存泄漏现原形!
前言 对于c++而言,如何查找内存泄漏是程序员亘古不变的话题:解决之道可谓花样繁多.因为最近要用到QT写程序,摆在我面前的第一个重要问题是内存防泄漏.如果能找到一个简单而行之有效的方法,对后续开发大有 ...
- ORM框架 和 面向对象编程
ORM框架: 1.SQLAlchemy: - 作用 1.提供简单的规则 2.自动转换成SQL语句 - DB first/code first DB first: 手动创建数据库以及表 ...
- BurpSuite 一些小技巧
拦截请求 设置不拦截下面的网站(记得保存项目,不然每次都要添加) .*\.?baidu.com|.*\.?google.com|.*\.?bcebos.com|.*\.?bdstatic.com|.* ...
- locust工具使用详解
今年负责部门的人员培养工作,最近在部门内部分享和讲解了locust这个工具,今天再博客园记录下培训细节 一.简介 1.优势 locust是python语言开发的一款的开源的的性能测试框架,他比jmet ...
- C语言入门-ide的概念介绍及codeblocks编辑器安装汉化
大家好,本章教程就ide(集成开发环境)来说一说. ide就是编译器+编辑器,原理就是在编辑器写代码,然后编辑器会让编译器来编译成二进制可执行文件. 常见的c/c++编译器有mingw64,msvc, ...
- linuxc语言图形化编程包含gtk/gtk.h编译总是报错找不到该文件的解决方法
在编译时输入gcc file.c `pkg-config --libs --cflags gtk+-2.0` 注意`不是单引号,和--前均有一个字符 这样问题就结局啦
- ch1_6_2求解删除公共字符问题
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成&q ...
- P1071 潜伏者(JAVA语言)
//HashMap大法好 题目描述 RR国和SS国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于SS国的RR 国间谍小CC终于摸清了 SS 国军用密码的编码规则: 1. S ...