gpt4 book ai didi

java - 如何在 Spring MVC Controller 的 Java Map 中获取带有子域的 JSON 字符串

转载 作者:行者123 更新时间:2023-12-03 12:18:34 24 4
gpt4 key购买 nike

我正在尝试在 Spring MVC Controller 上接收带有子域的 JSON 字符串到 Java 映射。

假设我在 JavaScript 部分有这个 JSON:

var contract = {dateFrom:someDate,
dateTo:someDate,
season: {seasonCode:someString}}

JSON 作为 GET Ajax 调用发送。

Controller 看起来像这样:

@RequestMapping(value = "/", method = RequestMethod.GET, headers = "Accept=application/json")
public ResponseEntity<String> getVertagFromSearch(@RequestParam Map<String, Object> allRequestParams, ModelMap model){

map 的输出如下所示:

{dateFrom=02-07-2014, dateTo=02-07-2014, season[seasonCode]=SO03}

GET 请求如下所示:

http://localhost:8080/contracts/?dateFrom=02-07-2014&dateTo=02-07-2014&season%5BseasonCode%5D=SO03

我想将此映射解析为我的契约(Contract)域对象。但对于这种结构,它不起作用。没有子域(季节)它就可以工作。

提前致谢!

更新1

作为对象发送,如下所示:(输出浏览器)

Object { dateFrom: "09-07-2014", dateTo: "08-07-2014", season: Object }

在 JSON.stringify 之后发送,如下所示:

"{"fromDate":"09-07-2014","dateTo":"08-07-2014","season":{"saiCode":"SO03"}}"

在这种情况下,我认为问题是开头和结尾的双引号。

最佳答案

我认为最好的两个选择是:

1) 修改您的 JS 对象以仅包含简单对象。如果您在更新之前查看请求 URL,您会发现:

{your IP:port}/contracts/?dateFrom=02-07-2014&dateTo=02-07-2014&season%5BseasonCode%5D=SO03

这根本不是 JSON,而是一个带有三个参数的简单请求:

 dateFrom = 02-07-2014 
dateTo = 02-07-2014
season%5BseasonCode%5D= SO03 // %5B and %5D are '[' and ']' escaped

所以你的 javascript 正在以普通参数转换 JS 对象(而不是 JSON)。

2) 发送一个参数,一个字符串,以及你的 JSON 结构,然后使用一些 JSON 库来解析它:

http://localhost:8080/contracts/?myJson=<JSON_String>

然后将您的 Controller 修改为:

@RequestMapping(value="/", method=RequestMethod.GET, headers="Accept=text/plain")
public ResponseEntity<String> getVertagFromSearch(@RequestParam String myJson, ModelMap model){
JSONObject myJSON= new JSONObject (myJson);
...
}

通常使用 POST 发送 JSON 会更容易(只需将其添加到正文中),但由于您的请求似乎要求提供数据,因此 POST 请求不是一个好主意。大多数其余 API 使用第一种方法,JSON 往往是响应的一部分,而不是 GET 请求的一部分。

关于java - 如何在 Spring MVC Controller 的 Java Map 中获取带有子域的 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24549971/

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