来自json的Spring mvc RequestMapping

use*_*639 6 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"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

 @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
    )
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.我收到以下错误.

找不到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) {
Run Code Online (Sandbox Code Playgroud)

M. *_*num 17

您正在向控制器发送JSON而不是请求参数.@RequestParam并且@ModelAttribute仅在将数据作为请求参数提交时才起作用.

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

这些框架还与Spring集成,可以在参考指南中阅读.

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

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String getMovie(@RequestBody YourObject) { ... }
Run Code Online (Sandbox Code Playgroud)