2019独角兽企业重金招聘Python工程师标准>>>

一、背景

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

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

Spring boot返回JSON类型响应及Content-Type设置相关推荐

  1. Spring Boot 返回 JSON 数据,一分钟搞定!

    在 WEB 项目中返回 JSON 数据是常见的交互形式,在 Spring Boot 中这一切都变得十分简单.So easy!!! 你所需具备的基础 什么是 Spring Boot? Spring Bo ...

  2. 从零开始学springboot笔记(二)-Spring boot返回json数据(中文无乱码)

    先创建json实体类,如下: public class Demo {private int age; private String address; private String name; priv ...

  3. Spring Boot 返回 XML 数据,一分钟搞定!

    2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击 ...

  4. spring boot / cloud (二) 规范响应格式以及统一异常处理

    spring boot / cloud (二) 规范响应格式以及统一异常处理 前言 为什么规范响应格式? 我认为,采用预先约定好的数据格式,将返回数据(无论是正常的还是异常的)规范起来,有助于提高团队 ...

  5. Spring Boot返回前端Long型丢失精度

    最近为Prong开发了一个基于snowflake算法的Java分布式ID组件,将实体主键从原来的String类型的UUID修改成了Long型的分布式ID.修改后发现前端显示的ID和数据库中的ID不一致 ...

  6. Spring Boot处理JSON数据

    Spring Boot处理JSON数据 在Spring Boot的Web应用中,内置JSON数据解析功能,默认使用Jackson自动解析,不需要加载Jackson依赖包,当控制器返回一个Java对象或 ...

  7. 利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细

    在Spring Boot的Web应用中 内置了JSON数据的解析功能,默认使用Jackson自动完成解析(不需要解析加载Jackson依赖包)当控制器返回一个Java对象或集合数据时 Spring B ...

  8. spring boot 中json数据处理

    spring boot获取json数据,使用@RequestBody JSONObject jsonParma注解,获取数据用jsonParma.getString方法 String类型转int使用I ...

  9. json日期格式化 java_java_Java Web程序中利用Spring框架返回JSON格式的日期,返回Json时格式化日期Date 第一 - phpStudy...

    Java Web程序中利用Spring框架返回JSON格式的日期 返回Json时格式化日期Date第一步:创建CustomObjectMapper类 /** * 解决SpringMVC使用@Respo ...

最新文章

  1. 软件测试质量过程检测文档_如何编写实际上有效的质量检查文档
  2. 体验使用node.js创建vue+Element-UI项目
  3. 利用Docker搭建Redis主从复制集群
  4. 【C语言】Linux内核源码--min,swap宏定义
  5. centos7 配置虚拟交换机(物理交换机truckport设置)(使用brctl)
  6. f分布表完整图a=0.05_2019年05月16日,沪深A股股票分析
  7. 一些Vue开发小技巧,让你开发更便捷
  8. 闲话WPF之十三(WPF中的资源)
  9. vuex-token的持久化
  10. 使用Spring Boot CLI的Spring Boot Initilizr
  11. arcpy 实现列举目录下的要素类与描述矢量数据要素类
  12. 树莓派使用 USB 摄像头做网络监控
  13. Redis势不可挡系列之概念剖析
  14. 干货 | 百亿节点,毫秒级延迟,携程金融基于nebula的大规模图应用实践
  15. oracle+soacs,第 3 章 使用 C++ 编译器选项
  16. 手把手教你构建 C 语言编译器(1)- 设计
  17. All-Pay Contests 论文定理推导(博弈论+机制设计)
  18. 挑选电脑免费加密软件特别注意哪些?
  19. linux设置用户密码
  20. C# 使用正则表达式提取文字

热门文章

  1. JSONP跨域jQuery处理整理(附天气数据实例)
  2. 实验十 配置EIGRP协议
  3. anaconda切换盘符以及手动安装包
  4. 关于分布式系统的数据一致性问题(一)
  5. 【OI】WERTYU UVa 10082
  6. .net Core学习笔记:Windows环境搭建
  7. 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) - Zery-zhang
  8. 一步步优化JVM五:优化延迟或者响应时间(1)
  9. SPSiteDataQuery
  10. VS2008常用快捷键