一、jquery $.ajax 中的参数说明
1、contentType:发送数据到服务器时所使用的内容类型。简单的说就是告诉服务我从的是什么类型。
默认是:"application/x-www-form-urlencoded"。
2、dataType:预期的服务器响应的数据类型。
3、data: 规定要发送到服务器的数据。
以用户信息为例:
3.1、对象:{"userId":'1232',"userName":"222"}
3.2、字符串:
3.2.1、表单数据:"userId=1&userName=222"
3.2.2、JSON字符串:'{"userId":'1232',"userName":"222"}'
也可以json.stringify({"userId":'1232',"userName":"222"})转成json字符串
二、Spring mvc 请收参数
1、当content-type:指定的是application/json时,接收参数指定@RequestBody
messageConvert会从request.getInputStream()取出数据转型成JSON对象。
当传的数据不是json字符串时
: JSON parse error。
2、当content-type:application/x-www-form-urlencoded时,指定了@RequestBody,
抛出throw new HttpMediaTypeNotSupportedException这个异常。
3、当content-type:application/x-www-form-urlencoded时,可以用JavaBean接收,
也可以@RequestParam("userId")接收。
特别注意当用JavaBean接收时,如果参数类型不对应将抛出错误。
public class User {
private long userId;
private String userName;
}
Failed to convert property value of type 'java.lang.String' to required type 'long' for property 'userId';
nested exception is java.lang.NumberFormatException: For input string: "12.32"]
三、前端后端一致,数据正常接收
1、ajax 不指定content-type就是默认(application/x-www-form-urlencoded),
data 传送对象,结果正常接收。
前端:
后端:
浏览器:
2、ajax 不指定content-type就是默认(application/x-www-form-urlencoded),
data 传送表单字符串,结果正常接收。
前端:
后端:
浏览器:
3、ajax 指定content-type:"application/json",data 指定
json字符串,后端使用@RequestBody接收,结果正常接收。
前端:
后端:
浏览器:
四、前端后端不致,导致数据不能正常接收
1、前端不指定content-type就是默认(application/x-www-form-urlencoded),
后端使用@RequestBody
前端:
后端:
异常:
2、前端指定content-type:"application/json",data:为JSON对象,
后端使用@RequestBody
前端:
后端:
异常:
3、前端不指定content-type就是默认(application/x-www-form-urlencoded),
数据类型不正确。
前端:
后端:
异常:
关于content-type还不清楚的请看Http 请求响应与内容协商。
领取专属 10元无门槛券
私享最新 技术干货