SpringMvc Controller请求传参方式总结

2021-03-22 13:24

阅读:498

标签:pos   div   content   bin   传递数据   数值   传参   post   servlet   

1. 请求的值绑定在request中

  • 方法参数中使用request,通过request.getParameter("参数名")的方式获取参数

参数拼接在url后面,以Get方式传参

GET url= http://localhost:8080/geturlp?name=zhangsan

或者

以POST的表单提交的方式 x-www-form-urlencoded

POST url=http://localhost:8080/geturlp

curl -d "name=zhangsan" http://localhost:8080/geturlp

1 @RequestMapping(value = "/geturlp")
2 @ResponseBody
3 public String getParameterOfBasic(HttpServletRequest request){
4     String name = request.getParameter("name");
5     return name;
6 }

 

2.简单类型参数和RequestParam注解

  • 如果请求参数和Controller方法的形参同名,可以直接接收(这种方式包含2个方式,以get请求的参数形式和POST的表单类型[x-www-form-urlencoded])

GET url=http://localhost:8080/getdefaultParam?username=zhangsan&password=1223

或者

POST url=http://localhost:8080/getdefaultParam

curl -d "username=zhangsan&password=1223"

1 @RequestMapping(value = "/getdefaultParam")
2 @ResponseBody
3 public String getdefaultParam(String username,String password){
4     return username +":" + password;
5 }
  • 如果请求参数和Controller方法的形参不同名,可以使用@RequestParam注解贴在形参前,设置对应的参数名称

@RequestParam不能传递空值,如果需要传递空值,可以设置默认值defaultValue或者required=fals

GET url=http://localhost:8080/getParam?username=zhangsan&password=123123

或者

POST url=http://localhost:8080/getParam

curl -d "username=zhangsan&password=123123"

1 @RequestMapping(value = "/getParam")
2 @ResponseBody
3 public String getParam(@RequestParam(value = "username",required = false) String name,
4                        @RequestParam(value = "password",defaultValue = "12312312") String pwd){
5     return name +":" + pwd;
6 }

 

3. 对象传参

此时能够自动把参数封装到形参的对象上

注意:

  1. 请求参数必须和对象的属性同名
  2. 此时对象会直接放入request作用域中,名称为类型首字母小写
  3. @ModelAttribute设置请求参数绑定到对象中并传到视图页面,设置key值

GET url=http://localhost:8080/getObj?name=zhangsan&age=12&score=12

或者

POST url=http://localhost:8090/mbank/test/param/getObj

curl -d "name=zhangsan&age=12&score=12" http://localhost:8090/mbank/test/param/getObj

1 @RequestMapping(value = "/getObj")
2 @ResponseBody
3 public String getObjBindObj(Student student){
4     return student.toString();
5 }
1 @RequestMapping(value = "/getObj")
2 @ResponseBody
3 public String getObjBindObj(@ModelAttribute("stu") Student student){
4     return student.toString();
5 }
  • 如果前端使用json的格式传递数据,则可以使用注解@RequestBody

注意:

  1. header中content-type:application/json
  2. body中使用json传递数据
 1 @Data
 2 @ToString
 3 class Student{
 4     private String name;
 5     private int age;
 6     private String score;
 7 }
 8 
 9 @RequestMapping(value = "/getObj")
10 @ResponseBody
11 public String getObjBindObj(@RequestBody Student student){
12     return student.toString();
13 }

 

4. 数组和List集合类型参数

注意: 直接摘抄,没有做实验

当前台页面传来的参数是参数名相同,参数值不同的多个参数时,可以直接封装到方法的数组类型的形参中,也可以直接封装到对象的集合属性中。

比如批量删除时传来的参数。

1 RequestMapping("/test04")
2 public ModelAndView test04(String id[]){
3     /*对于参数名相同的多个请求参数,可以直接使用数组作为方法的形参接收
4       可以使用对象中的集合属性接收*/
5       for (String i : id) {
6           System.out.println(i);
7       }
8       return null;
9 }
1 @RequestMapping("/test05")
2 public ModelAndView test05(Student student){
3       System.out.println(student.getId().size());
4       for (String i : student.getId()) {
5           System.out.println(i);
6       }
7       return null;
8 }

 

5. 路径参数,常用于restful风格

Restful是一种软件架构风格,严格上说是一种编码风格,其充分利用 HTTP 协议本身语义从而提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,该风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 

在后台,RequestMapping标签后,可以用{参数名}方式传参,同时需要在形参前加注解@PathVarible,假如前台的请求地址为localhost:8080/delete/3

GET url=http://localhost:8080/resultful/zhangsan/query

1 @RequestMapping("/resultful/{name}/query")
2 @ResponseBody
3 public String getRestFul(@PathVariable String name){
4     return name;
5 }

当然也可以定义不同的名字

@RequestMapping("/resultful/{username}/query")
@ResponseBody
public String getRestFul(@PathVariable("username") String name){
    return name;
}

 

注意:

     @PathVariable默认可以省略参数名字的,但是在Feign调用的时候最好带上,不然会出问题。记录下,以前好像碰到过这样的问题。(@PathVariable("name") String name)

 

SpringMvc Controller请求传参方式总结

标签:pos   div   content   bin   传递数据   数值   传参   post   servlet   

原文地址:https://www.cnblogs.com/fengxueyi/p/13876140.html


评论


亲,登录后才可以留言!