SpringBoot解決返回體content-type非json
最佳解決方案為自定義訊息轉換器。
首先,為什麼要自定義訊息轉換器?所見即所得,原本的訊息轉換器並不能滿足我們目前的需求。
在最近的專案中,使用了SpringBoot與FastJson構建專案,在我們返回時,使用 @ResponseBody
的方法裡,採用了fastjson裡的JSON.toJSONString()
方法返回我們需要的Json資料,而這種返回中,會有一個問題,在返回中@ResponseBody
註解中的訊息轉換器會預設理解為String解析,在返回體中如下圖,content-type
為text/html
。
因此我們解決想讓我們的返回體中content-type
為application/json
。
針對於這個問題,有一種最暴力的解決方案,直接在@RequestMapping
中新增produces
屬性,設定produces="application/json"
直接使得返回體設定為json格式。
當然對於這種每個介面暴力解決的方案來說,對於每寫一個介面都需要設定,因此增加我們寫程式碼的重複性工作,因此需要一個一勞永逸的方式。
在@ResponseBody
裡預設有訊息轉換器,一般json轉換使用的是JackJson進行轉換的,而我們在專案中配置使用fastjson,因此需要修改訊息轉化器。
首先訊息轉化器中不只有json轉換器,還有字元轉換器等。
在我們的專案中可以自定義一個配置類,標註有@Configuration
或者在@SpringBootApplication
的啟動配置類中新增下面程式碼,就增加了fastjson的訊息轉換器注入。
/** * fastjson訊息轉換器 * @return */@Beanpublic HttpMessageConverters httpMessageConverters() { FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); //新增fastJson的配置資訊 FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); //處理中文亂碼問題 ListfastMediaTypes = new ArrayList(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); //在convert中新增配置資訊. fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter> converter = fastJsonHttpMessageConverter; return new HttpMessageConverters(converter); }
當然需要注意,這種配置的方式必須在fastjson 1.2.44
版本及之後才支援。在我們使用Maven構建專案是,需要新增fastjson的依賴。
com.alibaba fastjson 1.2.44
使用這種配置後,可以在返回中去掉我們的json轉化,並直接返回我們需要轉化的實體,在訊息轉換器中會自動呼叫fastjson進行轉json。
解決後結果
作者:小濁微清
連結:】
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2810632/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 修改Nginx配置返回指定content-type的方法詳解Nginx
- Java介面返回JSON排序無需的問題解決JavaJSON排序
- springboot+mybatis實現登入功能,返回jsonSpring BootMyBatisJSON
- spring boot 解決後臺返回 json 到前臺中文亂碼之後出現返回json資料包錯Spring BootJSON
- 如何優雅的使用springboot返回下劃線格式JsonSpring BootJSON
- C# 解決httplistener querystring 中文亂碼、返回json中文格式亂碼C#HTTPJSON
- 輸出 JSON 資料時的 Content-TypeJSON
- Spring MVC3返回JSON資料中文亂碼問題解決(轉)SpringMVCJSON
- 關於使用中介軟體實現返回 JSONJSON
- SpringBoot 解決打包釋出後讀取不到 json 檔案問題Spring BootJSON
- go fiber: controller返回json格式GoControllerJSON
- 返回hash 型別的json型別JSON
- 介面返回[object,Object]解決方法Object
- JSON.parse()出錯解決JSON
- 格式化 curl 返回的 jsonJSON
- springboot返回結果包裝統一返回格式Spring Boot
- Laravel 靈活使用 中介軟體, 自定義全域性 API JSON 返回格式LaravelAPIJSON
- SpringBoot2.1版本的個人應用開發框架 - 實現基礎controller、service、前端封裝返回json體等Spring Boot框架Controller前端封裝JSON
- springboot 解決跨域 Access to XMLHttpRequest atSpring Boot跨域XMLHTTP
- ClassNotFoundException: org.json.JSONObject解決辦法ExceptionJSONObject
- 解決:npm install ERR! Unexpected end of JSON inputNPMJSON
- 解決java.lang.IllegalArgumentException: 'Content-Type' cannot contain wildcard type '*'異常(真實有效)...JavaExceptionAI
- JSON.parse () 的非嚴格模式JSON模式
- 如何取出 API 呼叫返回的 JSON 資料APIJSON
- 後端 API 一定要返回 JSON 嗎?後端APIJSON
- PHP JSON_decode 返回為 null 問題PHPJSONNull
- VS 返回值被忽略的解決方法
- 一次 nginx 返回 302 問題解決Nginx
- springboot去讀json檔案解析json陣列處理Spring BootJSON陣列
- SpringBoot 迴圈引用解決辦法Spring Boot
- SpringBoot跨域問題解決方案Spring Boot跨域
- 解決 SpringBoot 沒有主清單屬Spring Boot
- php json提交亂碼的解決辦法PHPJSON
- expect ':' at 0, actual = (JSON轉化異常解決)JSON
- springboot redisTemplate.opsForValue().setIfAbsent返回null原理Spring BootRedisNull
- springboot請求controller返回Whitelabel Error PageSpring BootControllerError
- Gin 框架 JSON 格式返回結果的使用方式框架JSON
- 在Struts2中寫介面,返回json格式JSON