后端接收参数理解

1,跟前端联调是,想让前端以对象的形式传List<map>对象给后台,后来发现前端传递数据的类型application/x-www-form-urlencoded;charset=UTF-8,后端不支持解析成对象,于是商量改成Content-Type: application/json形式进行传输,此时报错

Cannot deserialize instance of `java.util.ArrayList,仍然无法传输,后只能通过String方式接收自己做转换成需要的类型

原因:根本原因是后台无法将前台传来的数据解析成指定的格式,也就是说,无法把【】里的数据解析成想要的list

@RequestParam用来接收请求url?后面的参数,或者Content-Type为multipart/form-data、application/x-www-form-urlencoded时的http body数据。前端最初使用的是application/x-www-form-urlencoded,此种类型不支持解析成对象,因此无法传输list,

后采用@RequestBody用来接收http post请求的body,前端传入序列化好的json数据,后端可以解析为json对象(Content-Type需要指定为 application/json),但还是失败是因为spring默认采用jackson解析json数据

一、jackson无法解析value为[]的json

    当入参为{xxxx1:[1,2,3],xxxx2:[obj1,obj2,obj3]}时,springmvn controller接收入参写为Long[] xxxx1,无法解析,报错

    解决方案:

1.@RequestBody只能使用一次,可以与@RequestParam一起使用,但建议最好不要与@RequestParam一起使用,是因为@RequestBody会将InputStream吃掉,造成后面的@RequsetParam无法匹配到参数而报400,

注意:如果参数前面写着@requestparam(xxx ),则必须有与前端相对应的XXX名称(当然可以,无论是否有值)

设置此注释的required属性以调节是否必须传递),如果没有xxx名称,则请求将出错并报告400。

注意:如果参数前面不写@requestparam(xxx ),前端也可以没有相应的xxx名称。 如果有XXX名称那么,自动匹配;如果时对象接收,则会自动匹配属性进对象, 如果没有,请求也可以正确发送。

2.使用map接收,再用get获取

验证使用Map后,确实后台可以从map中拿到想要的结构

事务处理失效

项目存在多数据源时,单纯的

@Transactional可能并无法开启生效,需要先定义事务管理器,再进行
transactionManager指定,才可以生效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值