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全局序列化方式的配置和相关工具类的更多相关文章

  1. SpringBoot项目使用RedisTemplate设置序列化方式

    前端时间新项目使用SpringBoot的RedisTemplate遇到一个问题,先简单描述一下问题:不同项目之间redis共用一个,但是我们新项目读不到老项目存储的缓存.新项目搭建的时候没有跟老项目使 ...

  2. 授权过期后AJAX操作跳转到登录页的一种全局处理方式

    前两天园友JustRun分享了一篇 <菜鸟程序员之Asp.net MVC Session过期异常的处理>博文,正好自己前段时间被安排处理过这个问题,发现JustRun的方法有一点点可优化的 ...

  3. SpringBoot修改Redis序列化方式

    前言 由于Springboot默认提供了序列化方式并不是非常理想,对于高要求的情况下,序列化的速度和序列化之后大小有要求的情况下,不能满足,所以可能需要更换序列化的方式. 这里主要记录更换序列化的方式 ...

  4. springboot系列十一、redisTemplate和stringRedisTemplate对比、redisTemplate几种序列化方式比较

    一.redisTemplate和stringRedisTemplate对比 RedisTemplate看这个类的名字后缀是Template,如果了解过Spring如何连接关系型数据库的,大概不会难猜出 ...

  5. 三种序列化方式存取redis的方法

    常见的的序列化反序列方式的效率: protoBuf(PB) > fastjson > jackson > hessian > xstream > java 数据来自于:h ...

  6. Redis 序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer

    当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的.RedisTemplate默认使用的是JdkSerializat ...

  7. Springboot 关于日期时间格式化处理方式总结

    项目中使用LocalDateTime系列作为DTO中时间的数据类型,但是SpringMVC收到参数后总报错,为了配置全局时间类型转换,尝试了如下处理方式. 注:本文基于Springboot2.x测试, ...

  8. SpringBoot整合reids之JSON序列化文件夹操作

    前言 最近在开发项目,用到了redis作为缓存,来提高系统访问速度和缓解系统压力,提高用户响应和访问速度,这里遇到几个问题做一下总结和整理 快速配置 SpringBoot整合redis有专门的场景启动 ...

  9. JSON 解析 (三)—— FastJSON与Jackson比较

    一.方便性与性能 调用方便性而言: FastJSON提供了大量静态方法,调用简洁方便 Jackson须实例化类,调用相对繁琐,可通过封装成JSON工具类简化调用 性能而言: FastJSON反序列化的 ...

随机推荐

  1. Spring中的依赖查找和依赖注入

    作者:Grey 原文地址: 语雀 博客园 依赖查找 Spring IoC 依赖查找分为以下几种方式 根据 Bean 名称查找 实时查找 延迟查找 根据 Bean 类型查找 单个 Bean 对象 集合 ...

  2. 【图像处理】使用OpenCV进行图像处理教程(一)

    OpenCV是进行图像处理的工具,也是计算机视觉领域近十几年不断发展和完善的产物.面对这个已基本成熟的开源库知识体系,我们新生代有必要不断地总结.回顾,以新的视角快速融入计算机视觉的奥秘世界. 从这篇 ...

  3. Shtml、html、xhtml、htm以及SSI的了解与认识(转载)

    Shtml.html.xhtml.htm以及SSI的了解与认识(转载) 一.htm.html.shtml网页区别(博客园) 文章链接:https://www.cnblogs.com/Renyi-Fan ...

  4. salesforce lightning零基础学习(十七) 实现上传 Excel解析其内容

    本篇参考: https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader https://github.com/SheetJS/sheetjs ...

  5. 颠覆你认知的Python3.9

    我通读了python 3.9发行说明和相关的讨论.根据这些信息,我想写一个全面的指南,以便每个人都能一眼了解这些功能及其详细的工作原理 原文地址,点击这里,观看效果更佳 简而言之 从字典更新/合并到添 ...

  6. java位运算求一个整数的绝对值

    1 import java.util.Scanner; 2 3 public class Question1 { 4 public static void main(String[] args) { ...

  7. java例题_41 利用递归给猴子分桃

    1 /*41 [程序 41 猴子分桃] 2 题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把 3 多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均 ...

  8. 用DeBug的方式,带你掌握HBase文件在Snapshot的各种变化

    摘要:掌握Snapshot可以帮助我们很好的完成HBase数据备份和数据迁移的工作. 简介 HBase的Snapshot功能可以在不复制数据的情况下,快速克隆一张表,完成一次数据备份.通过Snapsh ...

  9. [BFS]最优乘车

    最优乘车 题目描述 HH 城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依 ...

  10. 带你全面认识CMMI V2.0(二)

    CMMI V2.0成熟度等级 CMMI V2.0的一大变化是,所有实践领域均适用于成熟度三级(ML3),并具有特定的附加必需实践水平. 例如,在ML3上需要进行因果分析和解决,但在CMMI成熟度四级( ...