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返回JSON类型响应及Content-Type设置
- api接口写好了?想过(Accept,Content-Type)?返回类型json|xml?
- HttpClient获取响应内容类型Content-Type
- 设置返回的Content-Type
- WEB API 返回类型设置为JSON 【转】
- 基于Oracle的EntityFramework的WEBAPI2的实现(三)—— 建立APIController及设置返回类型JSON、XML等
- php中header设置常见文件类型的content-type
- C# web api返回类型设置为json的两种方法
- C# web api返回类型设置为json
- php header Content-type:所有文件类型 文档类型及服务器响应类别
- C# web api返回类型设置为json的两种方法
- ext ajax发送 json格式数据 设置content-type
- C# web api返回类型设置为json的两种方法
- HttpClient获取响应内容类型Content-Type
- WebApi返回类型设置为json的三种方法
- C# web api返回类型设置为json的两种方法
- WebApi返回类型设置为json的三种方法
- php中header设置常见文件类型的content-type
- php中利用header设置content-type和常见文件类型的content-type
- C# web api返回类型设置为json的两种方法