zoukankan      html  css  js  c++  java
  • 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了。

  • 相关阅读:
    微信公众号迁移配置注意点
    关于memcache 命令查看和 Telnet
    centOS 安装(光安装 和 u盘安装)
    CentOS删除自带的java,安装新java
    ubuntu常用命令
    ubuntu 的挂起与休眠
    saiku应用的调试
    数据挖掘123
    unbutu 安装java教程
    workbench的schema讲解一:(维度dimension设置的基本内容)
  • 原文地址:https://www.cnblogs.com/yoyotl/p/7026566.html
Copyright © 2011-2022 走看看