如何获得JSON字符串与子域在Java地图在Spring MVC控制器

How to get JSON String with Subdomain in Java Map at Spring MVC Controller

本文关键字:Java 地图 MVC 控制器 Spring JSON 何获得 字符串      更新时间:2023-09-26

我试图接收一个JSON字符串与子域Java地图在Spring MVC控制器。

假设JavaScript部分有这个JSON:

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

JSON作为GET Ajax调用发送。

控制器看起来像这样:

@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

我想把这个Map解析成我的契约域对象。但是这种结构行不通。没有子域(季节)它工作。

提前感谢!

更新1

作为对象发送,它看起来像这样:(输出浏览器)

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

JSON后发送。将其字符串化如下:

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

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

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

1)修改你的JS对象,只有简单的对象。如果你在更新之前查看你的请求URL,你有:

{你的IP:端口}/合同/? dateFrom = 02 - 07 - 2014 -, dateTo = 02 - 07 - 2014 -,赛季% 5 bseasoncode % 5 d = 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>

,然后将控制器修改为:

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

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