【问题标题】:Spring mvc RequestMapping from json来自json的Spring mvc RequestMapping
【发布时间】:2013-12-22 09:46:36
【问题描述】:

我在为以下 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) {

【问题讨论】:

  • 你能粘贴这个控制器的完整代码吗?我认为问题出在其他地方。
  • 先尝试从RequestMapping中移除params条件,看看是否有效。
  • 我实际上并没有发送 json,我只是以这种方式表示它,因此它更具可读性。

标签: java spring-mvc


【解决方案1】:

我个人喜欢 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

【讨论】:

    【解决方案2】:

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

    您的 JSON 作为请求正文发送到控制器。对于这个春天有@RequestBody 注释。通常,您不想自己解析主体,而是使用框架为您完成繁重的工作。为此,存在像 Jackson 这样的库。

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

    您需要构建一个对象,该对象是您的 JSON 的 Java 表示,以便 Jackson 可以进行转换。然后你可以将你的控制器方法重写为这样的东西

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

    【讨论】:

    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多