开发者社区> 问答> 正文

前台传递一个数组到后台,后台接受不到数据? 400 报错

前台传递一个数组到后台,后台接受不到数据? 400 报错

前台入参check和oldCheck都是数组([]),

后台使用@RequestBody接受,接受到的均为null

使用@RequestParam接受,直接报400

只有在实体类中定义,使用@RequestBody接受对象,可以得到

求解惑

展开
收起
爱吃鱼的程序员 2020-06-03 16:36:11 1166 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    第一:不能有两个@RequestBody

    第二:@RequestParam不能接收application/json的json数据

    第三:一个@RequestBody正确

    ---------------分割线---------------

    补充一下,想传数组还有一种方法:用@RequestParam接收

    controller 代码

    public void func(@RequestParam String[] names, @ReqeustParam Integer[] ages) {
        // do someting
    }

    ajax代码

    $.ajax(
        url: url,
        type: 'post',
        data: {"names[0]": "name0", "names[1]": "name1", "ages[0]": "age0", "ages[1]": "age1"},
        ...
    )

     

    ######回复 @小伯恩 : 不好意思,太久没上OSC了。因为每个请求就一个body体,requestBody是放在body体传的######为什么就不能有两个啊,别人传json数据######回复 @whatwhowhy : 是,用@RequestParam接收的话要是form表单提交才行######我后台ajax定义了 headers: { 'Accept': 'application/json','Content-Type':'application/json' }, 所以没成功。。。######还是报Required String[] parameter 'names' is not present 错。 springboot + framework######

    这种 在ajax中以json传递的对象,在后端SPring 都认为是个对象,而不是将对象中的数组,分为多个数组。

    这个本质上是JSON转换为Object的语义造成的。

    ######没,其实一楼说的很对,如果只有一个@RequestBody确实可以获取######回复 @whatwhowhy : 这个貌似很有意思,我一直没有这样获取过。 有实例的话可以说下######也不是这样吧,spring MVC貌似就可以这样获取######

    @RequestBody会去识别参数的类型。如果只有一个数组ajax参数里面写数组就可以。如果是多个就需要在后台封装一个对象接收了。

    ######

    传参数的时候 adminIds:JSON.stringify(row), 这样传参,你后台指定用adminIds接收,但是前台没这个参数的嘛,没那么智能

    ######有吧,在json里面有的######

    是不是 String[]的限定有问题

    ######不知道,第一次用springboot + framework ,所以拿出来求解惑######

    将后端参数定义前加@RequestBody 修饰

    ######@RequestBody接收,接到的是null,一楼说了只能有一个,我如果不用对象的话有好几个
    2020-06-03 20:49:34
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
面向失败设计 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载