【问题标题】:How to deal with forward slashes when using JSON in a Java/Spring application?在 Java/Spring 应用程序中使用 JSON 时如何处理正斜杠?
【发布时间】:2016-08-23 18:27:29
【问题描述】:

存在一个函数,它解析通过 Postman 传入的 JSON,并用于填充对象。然后在 GSON 库的帮助下将该对象作为 JSON 返回。

虽然这很好,但要填充的类变量之一需要能够处理正斜杠(即解析 /some/address 并将其分配给我的类成员 customer_url 并返回给用户 @987654323 @)

/ 在请求中的任何位置使用时,这适用于任何和所有输入除了。这是一个例子:

http://localhost:8080/myApp/myInterface/populate/someObject/{"SOME_RANDOM_FIELD_TO_EXTRACT_STUFF_FROM": "/some/address" }

它会返回一个404 NOT FOUND 错误。

如果我也可能在控制器中出错,这是我在控制器中的后端代码:

    @RequestMapping(value = "/populate/someObject/{json}", method = RequestMethod.PUT, headers = "Accept=application/json", produces = {
            "application/json; charset=UTF-8" })
    @ResponseBody
    public ResponseEntity<String> getPopulateAndReturn(@PathVariable("json") String json) {
        JsonService jsonService = new JsonService();
        MyClass obj = populateThis(jsonService.convertJsonInputToJsonObject(json));
        Gson gson = new Gson();
        return new ResponseEntity<String>(gson.toJson(obj), HttpStatus.OK);
    }

我查看了相关问题,但没有一个能够引导我找到解决方案,也无法更好地理解问题。

【问题讨论】:

  • 这……不常见。 JSON 通常应作为请求正文提供。
  • @chrylis 有什么我可以看的例子吗?我试图搜索一些但不太确定您的意思(构建 API 以以 JSON 格式公开数据的新手)
  • @chrylis 明白了。感谢您指出!

标签: java json spring gson


【解决方案1】:

不敢相信我错过了这个。

所以问题在于后端函数与RequestMethod 交互的方式。以下是将 JSON 发送到应用程序并让应用程序以某种方式使用它的正确函数:

@RequestMapping(value = "/populate/someObject", method = RequestMethod.PUT, headers = "Accept=application/json", produces = {
        "application/json; charset=UTF-8" })
@ResponseBody
public ResponseEntity<String> getPopulateAndReturn(@RequestBody String json) {
    JsonService jsonService = new JsonService();
    MyClass obj = populateThis(jsonService.convertJsonInputToJsonObject(json));
    Gson gson = new Gson();
    return new ResponseEntity<String>(gson.toJson(obj), HttpStatus.OK);
}

在请求中填充任何/(正斜杠)时,它可以按预期工作。

@RequestBody 需要用于接收 JSON 请求。 JSON 输入不应直接在 URL 中提供(感谢您指出这一点,@chrylis)。

使用 Postman 时,单击 Body 类别并将您的 JSON 输入粘贴到那里,如下所示:

尽管使用了PUT 请求,但忽略对象本身的返回;想要测试并确保没有其他问题。在最佳实践的努力中,它应该返回正确的HttpStatus(如果我错了,请随时纠正我)。

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2017-07-19
    • 2016-07-31
    • 2011-12-22
    相关资源
    最近更新 更多