博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring boot返回JSON类型响应及Content-Type设置
阅读量:6840 次
发布时间:2019-06-26

本文共 1267 字,大约阅读时间需要 4 分钟。

hot3.png

一、背景

服务器软件用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 @ResponseBody3 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 @ResponseBody3 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了。

 

ps:

从content-type设置看Spring MVC处理header的一个坑

https://www.cnblogs.com/kaiblog/p/7565231.html?tdsourcetag=s_pcqq_aiomsg

 

转载于:https://my.oschina.net/jack088/blog/2993923

你可能感兴趣的文章
Linux上Samba服务的详细配置
查看>>
easyui datagrid 编辑行后如何保存
查看>>
MyEclipse中的报表工具(上)
查看>>
复数类的实现
查看>>
python_迭代器协议
查看>>
计算机技术领域当前的主流技术及社会需求调查报告
查看>>
PHP实现长网址与短网址
查看>>
Linux DNS主从配置
查看>>
虚拟机和镜像
查看>>
css的继承性
查看>>
shell脚本练习(12.12)
查看>>
不得不知的容器生态圈发展趋势
查看>>
二叉树红黑树和B+树
查看>>
OGNL Context结构图
查看>>
软连接;硬链接
查看>>
SpringBoot整合Kafka和Storm
查看>>
硬盘测试——hdparm
查看>>
Linux- 日常运维-nload -网卡流量
查看>>
Linux网络管理
查看>>
俄罗斯***组织APT29被指使用新型恶意软件***美国实体
查看>>