错误400 Spring JSON @RequestBody

时间:2014-06-02 02:42:55

标签: json spring

尝试使用@RequestBody将数据发布到Spring Controller时,我遇到错误400

我的Ajax方法:

 $(document).on('click', 'a[href|=#undo]', function () {

        var i = $(this).attr('data-ref');
        var uri = '/catalog/uso/undo/' + i;

        var data = {"quantidade":$('.qntundo').val()};

        console.log(JSON.stringify(data));

        $.ajax({
            url: uri,
            type: 'post',
            data: JSON.stringify(data),
            dataType: 'json',
            headers: {
                "Content-Type": "application/json"
            },
            async: false,
    ......

数据产生:{“quantdade”:“1”}

我的方法就像:

   @RequestMapping(value = "/catalog/uso/undo/{id}",
                method = RequestMethod.POST,
                consumes = MediaType.APPLICATION_JSON_VALUE,
                produces = MediaType.APPLICATION_JSON_VALUE)
        public
        @ResponseBody
        String undo(@PathVariable("id") int id,
                    @RequestBody Integer qnt) {
   //some logic here
}

我做错了,是因为我不能将整数用作“身体”吗?或者我需要告诉@RequestBody寻找“quantdade”,如果是这样我该怎么办?

PS:我在我的pom.xml上有Jackson lib也有

<mvc:annotation-driven/>
    <mvc:default-servlet-handler/>

在我的Spring XML中启用

1 个答案:

答案 0 :(得分:1)

我处理了评论中的提示,结果是我改变了方法的注释字段的类型:

@RequestMapping(value = "/catalog/uso/undo/{id}",
            method = RequestMethod.POST,
            consumes = MediaType.APPLICATION_JSON_VALUE,
            produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    String undo(@PathVariable("id") int id,
                @RequestBody LinkedHashMap qnt) {

现在我有一个LinkedHashMap,我可以访问它来获取值,例如:

Object o = qnt.get("qnt");

其中.get("your json object name here");

我需要一个整数,所以我进行了转换:

int quantidade = Integer.valueOf(String.valueOf(o));

现在我可以在变量quantidade

中访问json的值