将JSON发布到Spring MVC Controller返回400 Bad Request

时间:2014-04-04 17:36:27

标签: java json spring spring-mvc jackson

我想POST JSON并让Jackson将其转换为POJO,但是现在我甚至不能发布一个简单的String参数。

  1. 我正在使用Jackson 2.3.2(jackson-core和jackson-databaind)

  2. 我正在使用Spring 3.2.8.RELEASE(spring-context,spring-webmvc)

  3. 我的控制器如下所示:

    @RequestMapping(value="add-name", method=RequestMethod.POST, headers = "Accept=application/json")
    public String addName(@RequestParam(value = "name", required = false) String name) {
        LOG.info(String.format("name: %s", name));
        return "name";
    }
    
  4. 我用这样的数据POST到这个控制器:

    { "name" : "my_name" }
    
  5. 我收到的回复是400 Bad Request

  6. 注意:我通过jQuery.post()提交POST,但要将其作为变量删除,我还要通过FF Poster add-on提交POST,指定URL,内容类型(application / json),和数据如上。

    编辑:我认为问题可能是杰克逊图书馆甚至没有被调用。我把它从依赖项中删除,没有任何变化,没有不同的错误/异常,我仍然只是得到400 Bad Request响应。

    修改2 即使我将参数完全取出addName并发布空身{},我仍然会得到400 Bad Request

2 个答案:

答案 0 :(得分:3)

您正在正文中发布原始数据,但您的控制器正在查找名为name的参数。使用参数name发布,其值为my_name,或者在处理程序中使用@RequestBody来传入JSON对象。

答案 1 :(得分:3)

我降级到Spring 3.1.1.RELEASE和Jackson 1.9.9,它现在有效。看起来像一个黑客。我认为Spring 3.2和Jackson 2兼容。