一、背景

服务器软件用Spring boot开发,API调用的响应消息格式为JSON。

对端调用接口后无法解析响应。

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

二、问题分析

继续分析日志发现对端收到的响应消息类型是text/plain?!

对端解析先判断消息类型,这是无法按照JSON格式解析的。

三、问题解决

1. 网上流传最广泛的两种说法:

1.1 在类上使用注解@RestController
1.2 在方法上使用注解@ResponseBody
这个只是必要条件,却不是设置响应消息类型的方法。

2. 通过HttpServletResponse

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

跟踪日志,发现对端接收的响应的消息类型仍然是text/plain,这说明Spring重新设置了响应消息头。

3. 最终的解决办法
Spring留了一个设置响应消息Content-Type的接口。

在注解@RequestMapping增加一个produces参数项即可。

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

再跟踪日志,发现对端收到的响应消息类型是application/json;charset=UTF-8了。

Spring boot返回JSON类型响应及Content-Type设置的更多相关文章

  1. Spring Boot返回json数据及完美使用FastJson解析Json数据

     Spring Boot返回json数据 视频地址:http://www.iqiyi.com/w_19rubxzsr5.html 博文参考:https://blog.csdn.net/linxingl ...

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

    如何返回 JSON 数据? 在 Spring Boot 中返回 JSON 数据很简单,如下几步. 加入依赖 12345678910 <parent> <groupId>org. ...

  3. 2. Spring Boot返回json数据【从零开始学Spring Boot】

    在做如下操作之前,我们对之前的Hello进行简单的修改,我们新建一个包com.kfit.test.web然后新建一个类HelloControoler,然后修改App.Java类,主要是的这个类就是一个 ...

  4. (2)Spring Boot返回json数据【从零开始学Spring Boot】

    在做如下操作之前,我们对之前的Hello进行简单的修改,我们新建一个包com.kfit.test.web 然后新建一个类HelloControoler, 然后修改App.java类,主要是的这个类就是 ...

  5. spring boot 返回json字符串 null值转空字符串

    @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.cl ...

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

    Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定! ...

  7. 转载:Struts2+Jquery实现ajax并返回json类型数据

    摘要: 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数 ...

  8. spring boot 规范json返回值

    spring boot 规范json返回值 spring boot 接口返回配置 @ResponseBody ,则返回自定义的对象,解析成json. 但是,部分字段能友好的展示出来.如 Date,Lo ...

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

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

随机推荐

  1. hdu-5707-Combine String

    题意:给你三个字符串,让你计算1 2 串和3 串是否匹配,就是3串可以分解为 1  2 串,字母顺序必须是按照1 2 串的字母前后顺序. DP代码太深奥 看不太透,这个代码比较好理解一点: #incl ...

  2. STL_map.修改删除

    1.修改示例 int TdrSvgAttr::AttrSet_mem(bool _bAttrInStyle, string &_strAttrName, string& _strAtt ...

  3. webpack2的配置属性说明entry,output,state,plugins,node,module,context

    Webpack2配置属性详解 webpack说明 webpack是前端构建的一个核心所在,如果说后端构建就是把高级语言代码编译成机器码,那么前端的构建就是重新组合原有的代码,虽然并不编译成机器码,但实 ...

  4. pipenv+sublime text3 配置

    这半年用docker管理开发环境 + vs code/编码 git + pycharm跑unittest 优点多多,实现了关注点分离 1 dockfile 直接隔离成独立的image 2 code对g ...

  5. PC端、移动端的页面适配及兼容处理

    转自 一.关于移动端兼容性 目前针对跨终端的方案,主要分为两大阵营:一套资源Vs两套资源. 第一种是通过响应式或页面终端判断去实现一套资源适配所有终端: 第二种是通过终端判断分别调取两套资源以适配所有 ...

  6. nginx ----> nginx配置/反向代理/负载均衡

    nginx [engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP/UDP代理服务器,最初由Igor Sysoev编写. 环境: Ubuntu16.04 安装ngin ...

  7. public class feign.RetryableException feign.RetryableException: Connection refused (Connection refused) executing POST http://common-wx/wx/auth/client/token/v1

    一.异常出现的场景 Spring Cloud内部两个服务A和B,A调用B时,抛出该异常.提示连接拒绝 public class feign.RetryableException feign.Retry ...

  8. Confluence 6 对一个空间进行归档后产生的影响

    空间 如果一个空间被归档: 将不会在查找结果中显示,除非你选择 在归档空间中查找(Search archived spaces).如果没有归档空间的话,这个功能是隐藏的. 页面和内容将不会在 Conf ...

  9. lanmp环境中创建个软连接

    进入default,创建关于框架的链接 然后编辑配置文件 这样就可以在线上访问了.

  10. node模块之path——path.join和path.resolve的区别

    1.path.join([...paths]) path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径. 长度为零的 path 片段会被忽略. 如果 ...