来自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表示forms,以便Jackson可以进行转换。 然后,您可以将控制器方法重写为此类似的东西

 @RequestMapping(method = RequestMethod.GET) @ResponseBody public String getMovie(@RequestBody YourObject) { ... } 

我个人喜欢Jackson库 – 它有助于将JSON对象映射到Java的POJO。

看一下MKYONG的教程: http ://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/(下载ZIP with project)。 或者看看这个主题: 使用Jackson JSON在Spring MVC中解析JSON