由于在写代码的时候经常需要前后端进行传值,那么总结下前端是如何给后端传值,以及后端是如何接收的。以下包括:@PathVarible,@PathParam,@RequestParam,@ RequestBody,@RequestHeader 以及 Spring 自动封装。
@PathVarible
前端:
http://localhost:8080/article/findarticlesbyclassify/aaac4e63-da8b-4def-a86c-6543d80a8a1
后端:
@RequestMapping(value="/findarticlesbyclassify/{classifyId}",method=RequestMethod.GET)
public String findArticlesByClassify(@PathVariable String classifyId){
...
}
@PathParam
前端:
http://localhost:8080/article/findarticlesbyclassify?classifyId=aaac4e63-da8b-4def-a86c-6543d80a8a1
后端:
@RequestMapping(value = "/findarticlesbyclassify",method=RequestMethod.GET)
public String findArticlesByClassify(@RequestParam("classifyId") String classifyId){
...
}
@ RequestBody
常用来处理Content-Type不是 application/x-www-form-urlencoded编码 的内容。例如 json 数据。
当请求方式为 GET、POST 方式时,使用时机:
-
application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@ RequestBody也能处理);
-
multipart/form-data, 不能处理(即使用@ RequestBody不能处理这种格式的数据);
-
其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@ 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);
}
这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
String userName;
String pwd;
那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上
需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。
@RequestHeader
自动绑定请求头到参数
public String testRequestHeader(
@RequestHeader ( "Host" ) String hostAddr,
@RequestHeader String Host,
@RequestHeader String host ) {
...
}
Spring自动封装
前端参数:
var data = {
"title":req.body.title,
"mdData":req.body.mdData,
"classifyId":req.body.classifyId,
"tag1":req.body.tag1,
"tag2":req.body.tag2,
"tag3":req.body.tag3
}
后端实体类有:
public class Article extends BaseEntity{
private String title;
private String classifyId;
private String mdData;
private int readNum = 0;
}
后端接受参数:
@RequestMapping(value = "addarticle",method=RequestMethod.POST)
public String addArticle(HttpServletRequest request,Article article){
...
}
那么就会自动封装到对象 article 中。
@RequestBody和@RequestParam区别
https://blog.csdn.net/weixin_38004638/article/details/99655322