gpt4 book ai didi

java - 使用 Spring MVC 在 REST HTTP GET 请求中传递 JSON 对象

转载 作者:搜寻专家 更新时间:2023-10-31 20:28:14 25 4
gpt4 key购买 nike

根据这个REST model以及我认为对 REST 的共识:每个 REST 检索 都应作为 HTTP GET 请求执行。现在的问题是如何使用 Spring MVC 将复杂的 JSON 对象视为 GET 请求中的参数。我发现还有另一个共识是“使用 POST 进行检索!”只是因为“大公司这样做!”,但我被要求尽量遵守“REST 2 级规则”。

第一个问题:我是否在尝试做一些有意义的事情?

我想使用 Spring MVC 在 Java 中通过 GET 请求发送数组/列表/JSON 对象集。我无法弄清楚我的尝试有什么问题,我尝试添加/删除双引号,尝试使用 URL 参数,但我无法实现这个目标。

下面的代码有什么问题?代码片段来自 MVC Controller 。

@RequestMapping(
value = "/parseJsonDataStructures",
params = {
"language",
"jsonBeanObject"

}, method = RequestMethod.GET, headers = HttpHeaders.ACCEPT + "=" + MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public HttpEntity<ParsedRequestOutputObject> parseJsonDataStructures(

@RequestParam String language,
@RequestParam CustomJsonBeanObject[] customJsonBeanObjects){

try {
ParsedRequestOutputObject responseFullData = customJsonBeanObjectService.parseJsonDataStructures(customJsonBeanObjects, language);

return new ResponseEntity<>(responseFullData, HttpStatus.OK);
} catch (Exception e) {
// TODO
}
}

我尝试了多种方法来构建 URL 请求(总是收到 HTTP 代码 400 Bad Request),这是一个示例:

http://[...]/parseJsonDataStructures?language=en&jsonBeanObject={"doubleObject":10, "enumObject":"enumContent", "stringObject":"stringContent"}

JSON 对象变量 ar 类型:

  • 双倍(不是原始的)
  • 枚举
  • 字符串

我假设我可以一个接一个地传递多个 jsonBeanObject 参数。

jsonBeanObject Java bean 是:

public class CustomJsonBeanObject {

private Double doubleObject;
private CustomEnum enumObject;
private String stringObject;

/**
* Factory method with validated input.
*
* @param doubleObject
* @param enumObject
* @param stringObject
* @return
*/
public static CustomJsonBeanObject getNewValidatedInstance(Double doubleObject, CustomEnum enumObject, String stringObject) {
return new CustomJsonBeanObject
(
doubleObject ,
enumObject ,
stringObject
);
}

private CustomJsonBeanObject(Double doubleObject, CustomEnum enumObject, String stringObject) {
this.doubleObject = doubleObject;
this.enumObject = enumObject;
this.stringObject = stringObject;
}


public CustomJsonBeanObject() {}

// getter setter stuff

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}

最佳答案

您关于仅使用 GET 或 POST 的声明是针对 REST 的完全不正确。使用的 HTTP 方法取决于您正在执行的操作。对于检索,您应该使用 GET,添加/创建 POST,删除/删除 DELETE,以及替换 PUT。此外,要成为“真正的”REST,您应该只通过服务器响应提供的自记录操作来更改状态(请阅读 HATEOAS)。大多数人不会做后者。

顺便说一句,我尝试搜索“REST level 2”,但在有关床和 Dungeons'and'Dragons 的网站上也一无所获。我个人从未听说过它,所以它显然太新了,没有多少网站在谈论它,或者它可能被称为其他名称。

关于如何发送 JSON 对象的观点,Spring MVC 可以开箱即用。您可以阅读它 here ,它使用 @RequestBody 提取整个 HTTP 请求正文,然后使用您选择的 JSON 处理器对其进行解析。那里有很多代码示例,描述了如何处理列表等。

关于java - 使用 Spring MVC 在 REST HTTP GET 请求中传递 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24551412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com