这是写的时候遇到的坑,看了各种资料,虽然云里雾里的,但是能用。具体的原理还待后面的研究。写在这防止自己忘记。
在前台向后台利用Ajax传数据的时候。有formData(ajax默认的)和Request payload还有其他的类型。具体的差别可以去查。大概意思就是一般表单用的就是formData。JSON格式数据是request payload。
二者区别在于:对于后台来说FormData中是键值对。在后台可以利用request.getParameter("data")来获取到后面的那些值,因为在Request中会自动转化Form Data为key:value。而Request payload却不可以,因为是JSON格式,Reuqest中不存在该键值对。
2:在Ajax中向后台传数据的时候:可以自行的选择利用那种方式:如下:
有json数组employees。我们需要将这个值传到后台。
1:利用一般方式formData:该方式需要将上面的contentType: 'application/json'注释掉,不注释掉的意思就是利用JSON(request payload)格式传输。然后data部分的值为data:{'data':JSON.stringify(employees)}。其中有引号的‘data’是自定义的键,也就是后台request.getParaml(”data")中的data,JSON.stringify(employees)就是值,是要传的数据,意思是将数组序列化为字符串。
在后台利用获取该值:
2:利用Request payload:这种方法意思就是我直接传一个JSON对象给后台。后台不会把JSON对象自动转化为键值对存放在Request中等你来取,需要自己转。
这种方式data部分需要改变,只利用JSON字符串即可,但是后面需要加上contentType.告诉http传输的是JSON对象。
后台获取数据:
后台获取JSON一定要加@RequestBody,后面的类型为自定义的,如果前台传来的是你的某一个bean,如User,那么后面为User user也可以。(上面图中注释:将JSON转化为JSON有误,为将JSON字符串转化为JSON)。
重要:如果Ajax中是data:{key:value},一定不能加contextType:application/json。如果是data:JSON字符串,一定要加。并且在后台中,request和@RequestBody不能同时存在,因为前者是formData传输,后面是request payload传输。二者不能一起吧,这里不清楚,反正二者一起这里一直没有获取到值。为此才写了这个来记住一下。第一次写,加上学艺不精,有错还望各位指出改正,大家一起学习嘛。