springboot 接受数组对象

做业务时,遇到了接受数组的需求,上传文件提示报错:

查看上传请求,数组传了个[object object],。。。。。。。😂😂😂😂

我想传的是json对象,为什么会变为[object object],???

后来我用了下JSON.stringify()方法,结果变为这样:

提交到后台后,后台报错,为什么??

因为提交方式问题,ajax我用的是"application/x-www-form-urlencoded;“,要用application/json才行

没办法我又封装了个ajax方法如下:

A.ArrayPost = function(Url,Obj,IsAsync,RetFun,StatFun){
        var xhr= A.GetRoute();
        xhr.open("POST",A.BaseUrl+Url,IsAsync);
        xhr.setRequestHeader("Content-Type","application/json; charset=UTF-8");
        xhr.onreadystatechange = function(){
            switch(Submit.readyState){
                case 4:if(Submit.status == 200){RetFun(Submit.responseText);}; break;
            };
        };
        xhr.send(Obj);
    };

调用的地方:注意是传的json字符串:JSON.stringify(Json)

this.$ajax.ArrayPost("patient/savefile.do", JSON.stringify(Json), true, function(RetData) {
					Json = JSON.parse(RetData);
					switch(Json.code) {
					    //TODO
					};
				}, function(Message) {
					//console.log(Message);
				});

后台接口长这个样子:

封装类PatientFileList长这个样子:

这样修改后,搞定。

 

 

常见Content-Type有三种:

1.content-type:application/x-www-form-urlencoded   默认格式,当没有在信息头指定Content-Type的时候,默认使用这种格式传参

key1=value1

key2=value2

前端使用form的post提交方式,form的默认编码格式是enctype='application/x-www-form-urlencoded',成功接收前端form传过来的数据是通过@RequestParam的方式,但是这种方式适用于传参较少的情况,一旦参数较多,则显得后端的接口方法中的形参数量太多。

2. content-type:application/json   参数为json格式 

{"key1":"value1", "key2":"value2"}

3.content-type:multipart/form-data 上传文件用这种格式

以下摘自https://blog.csdn.net/feiyst/article/details/88431621的内容:

问题点1:

如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。

请求中传JSON时设置的Content-Type 如果是application/json或者text/json时,JAVA中request.getParameter("")怎么也接收不到数据。这是因为,Tomcat的HttpServletRequest类的实现类为org.apache.catalina.connector.Request(实际上是org.apache.coyote.Request)。

问题点2:

当前端请求的Content-Type是Json时,可以用@RequestBody这个注解来解决。@RequestParam 底层是通过request.getParameter方式获得参数的,换句话说,@RequestParam 和request.getParameter是同一回事。因为使用request.getParameter()方式获取参数,可以处理get 方式中queryString的值,也可以处理post方式中 body data的值。所以,@RequestParam可以处理get 方式中queryString的值,也可以处理post方式中 body data的值。@RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST。

@RequestBody接受的是一个json对象的字符串,而不是Json对象,在请求时往往都是Json对象,用JSON.stringify(data)的方式就能将对象变成json字符串。

总结:

前端请求传Json对象则后端使用@RequestParam;

前端请求传Json对象的字符串则后端使用@RequestBody。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩猩之火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值