zoukankan      html  css  js  c++  java
  • springboot自定义消息转换器HttpMessageConverter Spring Boot

    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
     
  • 相关阅读:
    idea 界面乱码问题 file was loaded in the wrong enconding:"utf-8"
    svn 下载,安装,创建库,设置用户和用户组,赋权限
    eclipse文件中的乱码问题
    Eclipse安装Spring插件springsource-tool-suite
    vue.js2.0:搭建开发环境及构建项目
    排序List集合中的元素
    Java GC机制和对象Finalize方法的一点总结
    xfire发布的Webservice中Spring注入为空的解决方案
    Http报文格式学习及Get和Post主要区别总结
    [转] tomcat组成及工作原理
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/11152857.html
Copyright © 2011-2022 走看看