springMVC 前后端传值

由于在写代码的时候经常需要前后端进行传值,那么总结下前端是如何给后端传值,以及后端是如何接收的。以下包括:@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

 

猜你喜欢

转载自blog.csdn.net/KAITUOZHEMJ/article/details/112665787