spring boot -- 控制器类中方法返回对象json序列化

摘要:
前言fastjson:它是一个用Java语言编写的JSON库,具有高性能和完整的功能。Fastjson接口简单易用。它已广泛应用于缓存序列化、协议交互、Web输出、Android客户端等。Jackson:它是spring boot解析和序列化json数据的默认库。它的功能与fastjson相同,但阿里巴巴的fastjson优于jackson的性能,大多数人选择fastjson来引入dependency<dependency><groupId>com。alibabafastjson1.2.56。

前言

  fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端

   Jackson:是spring boot 默认的解析和序列化json数据的库,作用和fastjson一样,只不过阿里的fastjson的性能要比jackson好些,大多数人的选择都是fastjson

引入依赖

   <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.56</version>
    </dependency>

JSON class

  引入依赖后,会提供一个JSON类,它有很多比较高效和实用的方法

 spring boot -- 控制器类中方法返回对象json序列化第1张

定义控制器返回对象json序列化处理器

  全局替换spring boot 默认的控制器返回对象序列化处理器。控制器中的方法返回的对象,spring boot都会对它进行一个序列化处理,后才会返回给前端,默认的处理器是JackSon

@Configuration
public class CustomMVCConf extends WebMvcConfigurationSupport {

@Override protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) { /* 先把JackSon的消息转换器删除. 备注: (1)源码分析可知,返回json的过程为: Controller调用结束后返回一个数据对象,for循环遍历 Converter,找到支持application/json的HttpMessageConverter,然后将返回的数据序列化成json。 具体参考org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor的writeWithMessageConverters方法 (2)由于是list结构,我们添加的fastjson在最后。因此必须要将jackson的转换器删除,不然会先匹配上jackson,导致没使用fastjson */ for (int i = converters.size() - 1; i >= 0; i--) { if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) { converters.remove(i); } } FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); //自定义fastjson配置 FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures( SerializerFeature.WriteMapNullValue, // 是否输出值为null的字段,默认为false,我们将它打开 SerializerFeature.WriteNullListAsEmpty, // 将Collection类型字段的字段空值输出为[] SerializerFeature.WriteNullStringAsEmpty, // 将字符串类型字段的空值输出为空字符串 SerializerFeature.WriteNullNumberAsZero, // 将数值类型字段的空值输出为0 SerializerFeature.WriteDateUseDateFormat, SerializerFeature.DisableCircularReferenceDetect // 禁用循环引用 ); fastJsonHttpMessageConverter.setFastJsonConfig(config); // 添加支持的MediaTypes;不添加时默认为*/*,也就是默认支持全部 // 但是MappingJackson2HttpMessageConverter里面支持的MediaTypes为application/json // 参考它的做法, fastjson也只添加application/json的MediaType List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON); fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); converters.add(fastJsonHttpMessageConverter); super.configureMessageConverters(converters); } }

免责声明:文章转载自《spring boot -- 控制器类中方法返回对象json序列化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux装agentCDN 环境下获取用户IP方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redis 序列化存入对象

redis 序列化存入对象 //序列化 public static byte[] serialize(Object obj){ ObjectOutputStream obi=null; ByteArrayOutputStream bai=null; try{ ba...

Xml序列化去掉命名空间,去掉申明

#region 序列化        /// <summary>        /// 序列化        /// </summary>        /// <param name="type">类型</param>        /// <param name="obj">对象</pa...

5分钟让你学会用最高效的工具解析所有Json

如果你是一个Android开发工程师,学会解析Json字符串是你的必修课,本篇文章主要以实例的方式手把手教你怎么做,花五分钟时间阅读本篇文章你就可以学会解析所有的Json字符串啦。 准备: json字符串 fastjson HiJson格式化json工具 开始教程: fastjson: 常用工作中解析json的工具类有谷歌的GSON,jackson...

复杂对象类型的WebService高级部分

从客户端除了传递字符串以外还可以传递复杂对象(对象必须序列化了),List,Map,数组和文件。 (1)定义一个对象实现了serializable 接口package cn.com.chenlly.ssh.webservice.axis; import java.io.Serializable;import java.util.ArrayList;impo...

java序列化和反序列化

java领域的对象如何传输 基于socket进行对象传输 如果传输的对象没有序列化会报错: 那么如何解决这个问题呢? 实现一个Serializable接口,再次运行就可以看到对象可以正常传输了 public class User implements Serializeable{ } 序列化的意义 当我们对User这个类增加一个Serializa...

继承LIst 的类JSON序列化,无法序列化属性的问题

/// <summary> /// Paged list /// </summary> /// <typeparam name="T">T</typeparam> [JsonObject(MemberSerialization = MemberSerialization...