在spring mvc3中同时使用@RequestBody和@RequestParam

时间:2012-04-18 19:13:35

标签: spring spring-mvc

我正在使用spring-mvc 3.1.0.RELEASE ,出于某种原因,使用查询参数和请求正文映射POST不起作用。

以下是我的控制器方法的外观:

  @RequestMapping(method = POST, value = "/post-to-me/") 
  public void handlePost(
    @RequestBody Content content,
    @RequestParam("param1") String param1,
    @RequestParam("param2") String param2
  ){
       //do stuff       
  }

但是,如果我将所有请求参数转换为路径参数,则映射有效。有没有人碰到类似的东西?

谢谢!

编辑:  “不起作用”== 404我尝试做的时候,POST /post-to-me?param1=x&param2=y

2 个答案:

答案 0 :(得分:1)

首先,你的POST网址与控制器方法网址不匹配,你的网址必须是“/ post-to-me /?param1 = x& param2 = y”not“/ post-to-me?param1 = X&安培; param2的= Y“

第二,Content类来自哪里?我用了一个字符串,对我来说很好用

@RequestMapping(method = RequestMethod.POST, value = "/post-to-me/")
public void handlePost(@RequestBody String content,
        @RequestParam("param1") String param1,
        @RequestParam("param2") String param2, HttpServletResponse response) {
    System.out.println(content);
    System.out.println(param1);
    System.out.println(param2);
    response.setStatus(HttpServletResponse.SC_OK);
}

请注意,我使用HttpServletResponse返回HTTP 200代码,但我认为返回Http代码有更好的解决方案,请查看:Multiple response http status in Spring MVC

答案 1 :(得分:1)

请求映射值末尾的斜杠可能是问题所在。 尝试:

@RequestMapping(method = RequestMethod.POST, value = "/post-to-me")

或将您的POST请求发送至POST /post-to-me/?param1=x&param2=y