迅速返回响应:“无法解析JSON。原始结果:”

时间:2019-07-10 19:46:43

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

我不确定为什么会这样。我对spring boot rest控制器的return语句如下所示

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

现在swagger UI上,我看到如下响应

can't parse JSON.  Raw result:

Successfully added

为什么会这样?

3 个答案:

答案 0 :(得分:1)

晚于游戏,但将分享我对这个问题的解决方案,因为它在我最近开发的基于Python Flask的REST后端中浮出水面。如果您的问题类似于我的问题,即使在Python中,也可以在JSON中包含NaN值。

我的潜在问题

我也很快就得到了“无法解析JSON”。事实证明,Python的标准库json导入将允许“现代”但非官方的JSON类型,例如“ NaN”。并使用float和voila进行一些计算...由于严格的解析器因NaN之类的类型而失败,因此需要检查您的请求JSON响应中是否没有这些。

使用编码器类解决了该问题

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

json.dumps(yourdata, cls=NumpyEncoder)

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

有关Python实现的详细信息,请参见我的so answer

答案 1 :(得分:0)

很难看到更多代码和实际的Swagger JSON,但似乎JSON存在语法问题。通过JSON验证程序运行它以进行确认。如果您使用Google,则有很多网站。

答案 2 :(得分:0)

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

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

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

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