来自JSON的Spring MVC RequestMapping
问题内容:
我在为以下Json字符串创建适当的RequestParams时遇到问题:
{
"input": [
{
"personAdres": {
"plaats": "Amsterdam",
"straat": "Grietenstraat",
"huisnummer": "12",
"postcode": "4512UN""
},
"interesses": [
"gas_station",
"soccer"
]
},
{
"personAdres": {
"plaats": "Arnhem",
"straat": "Koningsweg",
"huisnummer": "3",
"postcode": "1953AA"
},
"interesses": [
"gas_station",
"soccer"
]
}
]
}
我尝试了以下方法:
@RequestMapping(method = RequestMethod.GET, params = {"input", "personAdres", "plaats", "straat", "huisnummer", "postcode", "interesses"})
public
@ResponseBody`enter code here`
String getMovie(
@RequestParam(value = "input") String[] input,
@RequestParam(value = "personAdres") String[] personAdres,
@RequestParam(value = "plaats") String plaats,
@RequestParam(value = "straat") String straat,
@RequestParam(value = "huisnummer") String huisnummer,
@RequestParam(value = "postcode") String postcode,
@RequestParam(value = "interesses")String[] interesses,
ModelMap model
)
那似乎不起作用。我收到以下错误。
找不到与Servlet请求匹配的处理程序方法:
任何人都可以帮助我创建正确的requestParams。
编辑:这似乎工作
@Controller
@RequestMapping("/dateSuggestie")
public class DateController {
@RequestMapping(method = RequestMethod.GET)
public
@ResponseBody
String getMovie(
@RequestParam(value = "input[0][personAdres][plaats]") String p0Plaats,
@RequestParam(value = "input[0][personAdres][straat]") String p0Straat,
@RequestParam(value = "input[0][personAdres][huisnummer]") String p0HuisNummer,
@RequestParam(value = "input[0][personAdres][postcode]") String p0PostCode,
@RequestParam(value = "input[0][interesses][]") String[] p0Interesses,
@RequestParam(value = "input[1][personAdres][plaats]") String p1Plaats,
@RequestParam(value = "input[1][personAdres][straat]") String p1Straat,
@RequestParam(value = "input[1][personAdres][huisnummer]") String p1HuisNummer,
@RequestParam(value = "input[1][personAdres][postcode]") String p1PostCode,
@RequestParam(value = "input[1][interesses][]") String[] p1Interesses) {
问题答案:
您正在向控制器发送JSON,而不是请求参数。@RequestParam
并且@ModelAttribute
仅在数据作为请求参数提交时起作用。
您的JSON作为请求正文发送到控制器。对于这个spring有@RequestBody
注释。通常,您不想自己解析身体,而是使用框架为您完成繁重的工作。为此,存在像Jackson这样的库。
这些框架还与Spring集成在一起,可以从参考指南中阅读。
您需要构造一个对象,该对象是JSON的Java表示形式,以便Jackson可以进行转换。然后,您可以将控制器方法重写为这样的形式
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String getMovie(@RequestBody YourObject) { ... }