Spring boot返回JSON類型響應及Content-Type設置


一、背景

服務器軟件用Spring boot開發,API調用的響應消息格式為JSON。

對端調用接口后無法解析響應。

抓包看Response的Body部分確實是正確的JSON格式字符串。

二、問題分析

繼續分析日志發現對端收到的響應消息類型是text/plain?!

對端解析先判斷消息類型,這是無法按照JSON格式解析的。

三、問題解決

1. 網上流傳最廣泛的兩種說法:

1.1 在類上使用注解@RestController
1.2 在方法上使用注解@ResponseBody
這個只是必要條件,卻不是設置響應消息類型的方法。

2. 通過HttpServletResponse

1 @RequestMapping(value = { "/api/v1/test" }, method = { RequestMethod.POST }")
2 @ResponseBody
3 public String cancelCall(HttpServletResponse rsp) {
4   rsp.addHeader("Access-Control-Allow-Origin", "*");
5   rsp.setHeader("Content-Type", "application/json;charset=UTF-8");
6   return "{\"url\":\"http://192.168.1.1/notify\"}";
7 }

跟蹤日志,發現對端接收的響應的消息類型仍然是text/plain,這說明Spring重新設置了響應消息頭。

3. 最終的解決辦法
Spring留了一個設置響應消息Content-Type的接口。

在注解@RequestMapping增加一個produces參數項即可。

1 @RequestMapping(value = { "/api/v1/test" }, method = { RequestMethod.POST }, produces="application/json;charset=UTF-8")
2 @ResponseBody
3 public String cancelCall(HttpServletResponse rsp) {
4   rsp.addHeader("Access-Control-Allow-Origin", "*");
5   return "{\"url\":\"http://192.168.1.1/notify\"}";
6 }

再跟蹤日志,發現對端收到的響應消息類型是application/json;charset=UTF-8了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM