您的位置:首页 > 编程语言 > Java开发

Spring boot返回JSON类型响应及Content-Type设置

2018-01-25 10:55 471 查看


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了。

上善若水,水利万物而不争。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring boot