【问题标题】:Swagger return response: "can't parse JSON. Raw result:"Swagger 返回响应:“无法解析 JSON。原始结果:”
【发布时间】:2019-07-10 19:46:43
【问题描述】:

我不确定为什么会这样。我对spring boot 休息控制器的返回声明如下所示

return ResponseEntity.status(HttpStatus.OK).body("Successfully added");

现在在swagger UI 我看到如下回复

can't parse JSON.  Raw result:

Successfully added

为什么会这样?

【问题讨论】:

    标签: spring-boot swagger-ui swagger-2.0 spring-restcontroller


    【解决方案1】:

    发生这种情况是因为您返回的是字符串文字而不是 JSON 对象。我认为您的返回类型应该是 ResponseEntity<String> 但这不起作用,您需要在正文中指定一个对象。您可以创建一个 POJO 来为您保存消息,如下所示:

    public class YourResponseClass {
        private String message;
        //Constructors, getter and setter
    }
    

    然后在返回时你需要将返回类型更改为ResponseEntity<YourResponseClass>,然后返回你的响应:

    return ResponseEntity.ok(new YourResponseClass("Successfully Added."));
    

    【讨论】:

      【解决方案2】:

      迟到了,但会分享我对这个问题的解决方案,因为它出现在我最近开发的基于 Python Flask 的 REST 后端中。如果您的问题与我的类似,您的 JSON 中可能包含 NaN 值,尽管在 Python 中。

      我的根本问题

      我也大摇大摆地“无法解析 JSON”。事实证明,Python 的标准库 json import 将允许“现代”但不是官方的 JSON 类型,例如“NaN”。并使用浮点数和瞧瞧做一些计算...由于严格的解析器会因 NaN 等类型而失败,因此值得检查一下您的请求 JSON 响应中是否没有这些。

      用编码器类解决了它

      虽然不是 Java 特定的答案,但也许我的 Python 解决方案可以帮助您解决问题。

      json.dumps(yourdata, cls=NumpyEncoder)
      

      其中NumpyEncoder 是将NaN 值转换为JSON 和/或您可接受的规范的类。您可能也可以在代码中包含一些编码器类以删除 NaN 和/或其他工件。

      请参阅我的so answer 了解 Python 实现详情。

      【讨论】:

      • "NaN" 值正是我的问题。用df.fillna("") 摆脱了它们,它就像一个魅力。
      【解决方案3】:

      响应类型应为"text/plain" (produces = "MediaType.TEXT_PLAIN")

      【讨论】:

        【解决方案4】:

        如果没有看到更多代码和实际的 Swagger JSON,很难说,但似乎 JSON 存在语法问题。通过 JSON 验证器运行它以确认。如果你用谷歌搜索的话,有很多这样的网站。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-14
          • 1970-01-01
          • 2023-04-05
          • 2018-06-19
          • 1970-01-01
          相关资源
          最近更新 更多