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. MySQL确认注入点

    目录 WHERE子句后面的注入点 逻辑符号AND.OR other order by union limit table WEB渗透测试流程中,初期工作是进行信息收集,完成信息收集之后,就会进行漏洞测 ...

  2. 剑指 Offer 38. 字符串的排列 + 无重复元素的全排列

    剑指 Offer 38. 字符串的排列 Offer_38 题目描述 解题思路 可以使用递归实现全排列,每次都确定一个数的位置,当所有位置的数都确定后即表示一个排列. 但是考虑到本题需要排除重复的排列, ...

  3. 关于 C++ 中的强制转换 - 基础篇

    引言 假设有基类 A,包含了虚函数 func1,以及有派生类 B,继承于类 A,派生类 B 中实现了函数 func1.此时可以用 A 类型的指针指向 B 类型的对象,并用 A 类型的指针调用 B 类型 ...

  4. 鸿蒙开源第三方件组件——轮播组件Banner

    目录: 1.功能展示 2.Sample解析 3.Library解析 4.<鸿蒙开源第三方组件>系列文章合集 前言 基于安卓平台的轮播组件Banner(https://github.com/ ...

  5. 推荐模型AutoRec:原理介绍与TensorFlow2.0实现

    1. 简介 本篇文章先简单介绍论文思路,然后使用Tensoflow2.0.Keras API复现算法部分.包括: 自定义模型 自定义损失函数 自定义评价指标RMSE 就题目而言<AutoRec: ...

  6. js 数组的浅拷贝和深拷贝

    1.背景介绍 javascript分原始类型与引用类型.Array是引用类型,直接用"="号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,指向的是同一个内存地址,其中一个 ...

  7. 编写自己的代码库(css3常用动画的实现)

    编写自己的代码库(css3常用动画的实现) 1.前言 在月初的时候,发了CSS3热身实战--过渡与动画(实现炫酷下拉,手风琴,无缝滚动).js的代码库也发过两次,两篇文章.之前也写了css3的热身实战 ...

  8. CF524F And Yet Another Bracket Sequence 题解

    题目链接 算法:后缀数组+ST表+贪心   各路题解都没怎么看懂,只会常数巨大的后缀数组+ST表,最大点用时 \(4s\), 刚好可以过... 确定合法序列长度   首先一个括号序列是合法的必须满足以 ...

  9. 得分(JAVA语言)

    package 第三章习题; /*  * 给出一个由O和X组成的串(长度为1~80),统计得分.  * 每个O得分为目前连续出现的O的个数,X得分为0.  * 例如,OOXXOXXOOO的得分为  * ...

  10. c/c++ switch case内括号

    如果在case语句中有定义变量,则必须要加{},否则会报错.