来自json的Spring mvc RequestMapping

时间:2013-12-05 12:36:33

标签: java spring-mvc

我在为以下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请求的匹配处理程序方法:

任何人都可以帮我创建正确的请求.Params。

编辑:这似乎有用

@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) {

2 个答案:

答案 0 :(得分:17)

您正在向控制器发送JSON而不是请求参数。仅当数据作为请求参数提交时,@RequestParam@ModelAttribute才有效。

您的JSON作为请求正文发送给控制器。对于这个春天,有@RequestBody注释。一般来说,你不想自己解析身体,而是使用框架为你做繁重的工作。为此,存在Jackson等库。

这些框架也与Spring集成,可以在the reference guide中阅读。

您需要构造一个对象,它是JSON的Java表示形式,以便Jackson可以进行转换。然后,您可以将控制器方法重写为此类

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

答案 1 :(得分:2)

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

看一下MKYONG的教程:http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/(用项目下载ZIP)。 或者看一下这个帖子:Parsing JSON in Spring MVC using Jackson JSON