http中的常用的content-type有:
1.GET 请求
GET 请求不存在请求实体部分,键值对参数放置在 URL 尾部,因此请求头不需要设置 Content-Type 字段
非 ASCII 码会自动进行编码转换,例如发送请求:www.bilibili.com?hehe=你的我的
2.post 请求
- JSON: application/json
- XML: text/xml
- 纯文本: text/plain
- html: text/html
- application/x-www-form-urlencoded,会将表单内的数据转换拼接成 key-value 对(非 ASCII 码进行编码)
- multipart/form-data,将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件
那么主要的几种分别对应后端java的处理方式为:
application/x-www-form-urlencoded;charset=UTF-8 如果是单个参数的话,后端可以用@RequestParam (该注解修饰的参数默认为必传) 也可以什么都不写。如果是用对象封装的实体,那么什么都不用写。
application/json;charset=UTF-8 表明传递的是json类数据,那么后端的参数应该用@RequestBody 修饰。
multipart/form-data 表明是上传文件,后端应该用使用@RequestParam注解修饰。
@requestBody注解作用
1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。
2、通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
例如:
$.ajax({
url:"/login",
type:"POST",
data:'{
"userName":"admin",
"pwd":"admin123"
}',
content-type:"application/json charset=utf-8",
success:function(data){
alert("request success ! ");
}
});
@requestMapping("/login")
public void login(@RequestBody String userName,@RequestBody String pwd){
System.out.println(userName+" :"+pwd);
}
或者说,当我有个User类,拥有userName 和pwd 两个字段,则可以修改为:
@requestMapping("/login")
public void login(@requestBody User user){
System.out.println(userName+" :"+pwd);
}
需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。
@RequestParam 注解作用
@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
语法:
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
如:
@RequestMapping("test")
public void test(@RequestParam("name")String name){
System.out.println("name:"+name);