SpringMVC之参数获取

2023-12-21 23:12:42

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
SpringMVC之参数获取


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

在 SpringMVC 框架中,获取请求参数是常见的操作之一。无论是处理表单提交、查询字符串还是路径变量,SpringMVC 都提供了方便的机制来获取这些参数。在这篇博客中,我们将深入探讨 SpringMVC 中获取请求参数的各种方式。
通过阅读这篇博客,你将了解如何通过注解和手动解析的方式获取请求参数。无论你是 SpringMVC 的新手还是有经验的开发者,这篇博客都将为你提供有用的信息和实际的示例,帮助你更好地理解和应用 SpringMVC 中参数获取的相关知识。让我们开始探索 SpringMVC 的参数获取世界吧!


提示:以下是本篇文章正文内容,下面案例可供参考

一、封装简单数据类型

SpringMVC支持参数注入的方式用于获取请求数据,即将请求参数直接封装到方法的参数当中。用法如下:

// 获取简单类型参数
@RequestMapping("/c1/param1")
// 当请求参数中有username和age时,会自动赋给simpleParam函数
public void simpleParam(String username, int age) {
    System.out.println(username);
    System.out.println(age);
}

当你访问/c1/param1时,SpringMVC会将请求参数中的username和age封装到控制器方法的参数中,从而实现简单数据类型的封装。

二、封装单个对象

在SpringMVC中,你可以将请求参数封装为单个对象。用法如下:
1.编写实体类:创建一个包含请求参数对应属性的实体类。

public class Student {
  private int id;
  private String name;
  private String sex;
  // 省略getter/setter/tostring
}

2.编写控制器方法:在控制器方法中,定义一个与实体类对应的参数。

// 获取对象类型参数
@RequestMapping("/c1/param2")
public void objParam(Student student){
  System.out.println(student);
}

3.访问该方法:请求参数名和方法参数的属性名相同,即可完成自动封装。
如:http://localhost:8080/c1/param2?id=1&name=bz&sex=female

三、封装关联对象

1.编写实体类:创建一个包含请求参数对应属性的实体类。

public class Address {
  private String info; //地址信息
  private String postcode; //邮编
  // 省略getter/setter/tostring
}
public class Student {
  private int id;
  private String name;
  private String sex;
  private Address address; // 地址对象
  // 省略getter/setter/tostring
}

2.编写控制器方法:在控制器方法中,定义一个与实体类对应的参数。

// 获取关联对象类型参数
@RequestMapping("/c1/param3")
public void objParam2(Student student){  
  System.out.println(student);
}

3.访问该方法:请求参数名和方法参数的属性名相同,即可完成自动封装。
如:http://localhost:8080/c1/param3?id=1&name=bz&sex=female&address.info=beijing&address.postcode=030000

四、封装简单数据类型集合

编写控制器方法,绑定简单数据类型List参数,参数前必须添加@RequestParam注解

// 绑定简单数据类型List参数,参数前必须添加@RequestParam注解
@RequestMapping("/c1/param4")
public void listParam(@RequestParam List<String> users){ 
  System.out.println(users);
}

也可以绑定数组类型:

@RequestMapping("/c1/param5")
public void listParam2(@RequestParam String[] users){ 
  System.out.println(users[0]); 
  System.out.println(users[1]);
}

2.访问该方法:请求参数名和方法参数的属性名相同,即可完成自动封装。
如:http://localhost:8080/c1/param4?users=bj&users=sxt

五、封装对象类型集合

1.编写实体类:创建一个包含请求参数对应属性的实体类。

public class Student {
  private int id;
  private String name;
  private String sex;
  private List<Address> address; // 地址集合
  // 省略getter/setter/tostring
}

2.编写控制器方法:在控制器方法中,定义一个与实体类对应的参数。

// 对象中包含集合属性
@RequestMapping("/c1/param6")
public void listParam3(Student student){
  System.out.println(student);
}

3.访问该方法:请求参数名和方法参数的属性名相同,即可完成自动封装。
如:http://localhost:8080/c1/param6id=1&name=bz&sex=female&address[0].info=bj&address[0].postcode=100010&address[1].info=sh&address[1].postcode=100011

六、封装为Map集合

1.编写实体类:创建一个包含请求参数对应属性的实体类。

public class Student {
  private int id;
  private String name;
  private String sex;
  private Map<String,Address> address; // 地址集合
    // 省略getter/setter/tostring
}

2.编写控制器方法:在控制器方法中,定义一个与实体类对应的参数。

// 对象中包含Map属性
@RequestMapping("/c1/param7")
public void mapParam(Student student){  
  System.out.println(student);
}

3.访问该方法:请求参数名和方法参数的属性名相同,即可完成自动封装。
如:
http://localhost:8080/c1/param7?id=1&name=bz&sex=female&address[‘one’].info=bj&address[‘one’].postcode=100010&address[‘two’].info=sh&address[‘two’].postcode=100011

七、Servlet原生对象获取

SpringMVC也支持使用Servlet原生对象,在方法参数中定义HttpServletRequest、HttpServletResponse、HttpSession等类型的参数即可直接在方法中使用。

// 使用Servlet原生对象
@RequestMapping("/c1/param8")
public void servletParam(HttpServletRequest request, HttpServletResponse response, HttpSession session){ 
  // 原生对象获取参数                           
  System.out.println(request.getParameter("name")); 
    System.out.println(response.getCharacterEncoding());  
    System.out.println(session.getId());
}


总结

提示:这里对文章进行总结:

通过学习这篇博客,你应该对 SpringMVC 中获取请求参数的方法有了更深入的理解。希望这对你在开发 SpringMVC 应用程序时有所帮助。如果你有任何问题或需要进一步了解,请随时在评论中提问。

文章来源:https://blog.csdn.net/liubopro666/article/details/135138859
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。