【问题标题】:Error 400 Spring JSON @RequestBody错误 400 Spring JSON @RequestBody
【发布时间】:2014-06-02 02:42:54
【问题描述】:

我在尝试使用 @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,
    ......

数据产生这个:{"quantidade":"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 寻找“quantidade”,如果是这样,我该怎么做?

PS:我的 pom.xml 上有 Jackson 库,也有

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

在我的 Spring XML 中启用

【问题讨论】:

  • 您的请求正文不是整数,它是具有单个整数字段的对象。尝试使参数成为一个对象,其中包含一个名为 quantidade 的整数字段。
  • @Misha 我尝试了你所说的,将 JSON 字段与整数参数名称匹配,尝试了 JSON: qnt, Integer qntJSON: quantidade, Integer quantidade,但仍然出现错误 400
  • @Misha 我尝试使用 Object 并且我发现 @RequestBody 注释字段是一个 LinkedHashMap 并且它不能转换为 Integer java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.lang.Integer

标签: json spring


【解决方案1】:

我解决了 cmets 中的提示,结果是我更改了方法上的注释字段类型:

@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 值

【讨论】:

    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 2015-04-26
    • 2013-03-04
    • 2017-08-12
    • 2017-04-09
    • 1970-01-01
    • 2019-10-02
    • 2014-04-01
    相关资源
    最近更新 更多