Jackson一直是springframework默认的json库,从4.1开始,springframework支持通过配置GsonHttpMessageConverter的方式使用Gson。

在典型的Spring MVC中,一旦请求退出@Controller,它将寻找一个视图来呈现。当指定了@RequestBody或@RestController时,我们会告诉Spring跳过这一步,将java对象通过model写入响应结果。这样做时,Spring将专门寻找一个HttpMessageConverter来执行Java对象向其它类型(通常是Json)的转换,Spring默认使用的是 MappingJackson2HttpMessageConverter,所以如果希望使用Gson来执行这种转换,只要使用GsonHttpMessageConverter替换之即可。

1.为什么要使用Gson

  • 速度快,效率高
    粗略测试下来,执行效率 gson > fastjson > jackson
  • 对kotlin的支持更友好
    Gson、Jackson、Fastjson这3种常见的Json库中,仅有Gson能兼容kotlin,其它2种均会使kotlin中is开头的字段在Json序列化后丢失。

2.Spring Boot项目中如何使用Gson作为Spring MVC的序列化工具

下面展示具体的实现步骤,其中还包括时间格式设置、兼容swagger(swagger默认使用jackson作为序列化工具,如果不作处理会出错)

Step 1:引入gson依赖

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.4'

Step 2:向HttpMessageConverters中添加GsonHttpMessageConverter,默认会添加到HttpMessageConverters列表的最前面以优先使用

import com.google.gson.*
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.autoconfigure.http.HttpMessageConverters
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.http.converter.json.GsonHttpMessageConverter
import springfox.documentation.spring.web.json.Json
import java.lang.reflect.Type @Configuration
class GsonConfig { @Value("\${spring.gson.date-format}")
private lateinit var GSON_DATE_FORMAT: String @Bean
fun gson(): Gson {
return GsonBuilder().setDateFormat(GSON_DATE_FORMAT).registerTypeAdapter(Json::class.java, SpringfoxJsonToGsonAdapter()).create()
} @Bean
fun httpMessageConverters(): HttpMessageConverters {
val gsonHttpMessageConverter = GsonHttpMessageConverter()
gsonHttpMessageConverter.gson = gson()
return HttpMessageConverters(true, listOf(gsonHttpMessageConverter))
} } internal class SpringfoxJsonToGsonAdapter : JsonSerializer<Json> { override fun serialize(json: Json, type: Type, context: JsonSerializationContext): JsonElement = JsonParser().parse(json.value()) }

其中GSON_DATE_FORMAT指定了日期时间格式

spring:
gson:
date-format: yyyy-MM-dd HH:mm:ss

完成上述2步后,使用@RestController或者@ResponseBody时执行序列化就是由Gson来完成的了。

参考文章:https://www.leveluplunch.com/java/tutorials/023-configure-integrate-gson-spring-boot/

链接:https://www.jianshu.com/p/b2b6ba67dfb8
 

springboot自定义消息转换器HttpMessageConverter Spring Boot - 使用Gson替换Jackson的更多相关文章

  1. springboot自定义消息转换器HttpMessageConverter

    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制就是利用HttpMessageCo ...

  2. SpringBoot启动方式,Spring Boot 定义系统启动任务

    SpringBoot启动方式,Spring Boot 定义系统启动任务 SpringBoot启动方式 1.1 方法一 1.2 方法二 1.2.1 start.sh 1.2.2 stop.sh 1.2. ...

  3. spring boot 是如何利用jackson进行序列化的?

    接上一篇:spring boot 是如何利用jackson进行反序列化的? @RestController public class HelloController { @RequestMapping ...

  4. SpringBoot 消息转换器 HttpMessageConverter

    1.简介: Spring在处理请求时,由合适的消息转换器将请求报文绑定为方法中的形参对象,在这里,同一个对象就有可能出现多种不同的消息形式,比如json和xml.同样,当响应请求时,方法的返回值也同样 ...

  5. 让你的spring-boot应用日志随心所欲--spring boot日志深入分析

    1.spring boot日志概述 spring boot使用Commons Logging作为内部的日志系统,并且给Java Util Logging,Log4J2以及Logback都提供了默认的配 ...

  6. 使用IDEA 中 实现springboot 热部署 (spring boot devtools版)

    第一步:添加springboot的配置文件 首先我先贴出我的配置 添加依赖包 <!-- spring boot devtools 依赖包. --> <dependency> & ...

  7. springboot(十七):使用Spring Boot上传文件

    上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9. ...

  8. SpringBoot学习笔记(2) Spring Boot的一些配置

    外部配置 Spring Boot允许使用properties文件.yaml文件或者命令行参数作为外部配置 使用@Value注解,可以直接将属性值注入到你的beans中,并通过Spring的Enviro ...

  9. springboot成神之——spring boot,spring jdbc和spring transaction的使用

    本文介绍spring boot,spring jdbc和spring transaction的使用 项目结构 依赖 application model层 mapper层 dao层 exception层 ...

随机推荐

  1. 一大波 Facebook Libra 技术文章来袭

    由于 Libra 具有真正的稳定的可编程货币的特性, Libra 或许可以带来又一波平台红利. 上周我们(深入浅出区块链技术社区)发起了 Libra 技术文档的翻译计划,到这周文档已经翻译了一半.欢迎 ...

  2. python之turtle使用:画一颗美美哒的树

    关于工具介绍这里小生就不赘述了,这里附上个人觉得最详细的文档地址:https://docs.python.org/zh-cn/3/library/turtle.html?highlight=turtl ...

  3. Element + Vue I18n动态import加载国际化语言包翻译文件

    需求 项目为多页应用,包含产品a.b.c.d.e,每个产品都有自己的翻译文件.一次加载所有翻译文件是极度不合理的.于是考虑动态加载. 实现 参考官方文档:延迟加载翻译 项目结构 │ ├── dist ...

  4. Python3基础 __file__ 查询模块的完整路径

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  5. IDEA 使用SequenceDiagram插件绘制时序图

    最近看代码,由于代码的调用层级深度比较多,层层深入到某处时,已经忘记了身处何处,虽然自己可以使用一些画图工具来时序图,但是,这种情况下,自己画时序图很繁琐,比较浪费时间,上网找了一下IDEA有一个插件 ...

  6. maven安装和应用

    maven安装和应用 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://www.cnblogs.com/xihehua/p/9639045.html https://w ...

  7. Elasticsearch6.2.1安装elasticsearch-sq插件

    参考 https://github.com/NLPchina/elasticsearch-sql 1.下载插件 wget https://github.com/NLPchina/elasticsear ...

  8. VC++6.0 打印调试信息

    1.在MFC中加入TRACE语句 2.在TOOLS->MFC TRACER中选择 “ENABLE TRACING”点击OK 3.进行调试运行,GO(F5)(特别注意:不是执行‘!’以前之所以不能 ...

  9. maven-archetype-plugin 的正确打开方式

    1.  准备好一个编辑好的模板工程 2. 在 pom.xml 中添加 maven-archetype-plugin 插件 <plugin> <groupId>org.apach ...

  10. win32 event事件

    原文地址:https://blog.csdn.net/u011394598/article/details/82981399 SetEvent/ResetEvent分别将EVENT置为这两种状态分别是 ...