Jackson一直是springframework默認的json庫,從4.1開始,springframework支持經過配置GsonHttpMessageConverter的方式使用Gson。css
在典型的Spring MVC中,一旦請求退出@Controller,它將尋找一個視圖來呈現。當指定了@RequestBody或@RestController時,咱們會告訴Spring跳過這一步,將java對象經過model寫入響應結果。這樣作時,Spring將專門尋找一個HttpMessageConverter
來執行Java對象向其它類型(一般是Json)的轉換,Spring默認使用的是 MappingJackson2HttpMessageConverter
,因此若是但願使用Gson來執行這種轉換,只要使用GsonHttpMessageConverter
替換之便可。java
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做爲序列化工具,若是不做處理會出錯)web
Step 1:引入gson依賴spring
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.4'
Step 2:向HttpMessageConverters中添加GsonHttpMessageConverter,默認會添加到HttpMessageConverters列表的最前面以優先使用json
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指定了日期時間格式bash
spring: gson: date-format: yyyy-MM-dd HH:mm:ss
完成上述2步後,使用@RestController或者@ResponseBody時執行序列化就是由Gson來完成的了。app
參考文章:https://www.leveluplunch.com/java/tutorials/023-configure-integrate-gson-spring-boot/ide