3.Spring-mvc 参数绑定八种类型

本文详细介绍了SpringMVC中的参数绑定机制,包括默认支持的类型如HttpServletRequest、HttpServletResponse等,以及基本数据类型、包装数据类型、POJO实体类、复合POJO、数组、List和Map类型的绑定方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在 SpringMVC 中,提交请求的数据是通过方法形参来接收的。从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就可以直接使用该形参。
把值直接传到页面
分为7种绑定类型:
(一)
默认支持类型,也是常用类型,传值会用到几个对象:
①、HttpServletRequest 对象

②、HttpServletResponse 对象

③、HttpSession 对象

④、Model/ModelMap 对象
写方法时可以把参数写进来:
public ModelAndView test(HttpServletRequest request, HttpServletResponse response, Model model, ModelMap mm) throws Exception {
ModelAndView mv = new ModelAndView();

request.setAttribute(“name”,“jingjing”);
request.getSession().setAttribute(“age”,22);
model.addAttribute(“sex”,“nv”);
mm.addAttribute(“email”,“110@qq.com”);
mv.setViewName(“show”);
return mv;
}

(二)
基本数据类型的绑定:
当input的name值和Controller的参数变量名不一致可以用注解方式解决:
@RequestMapping("/print")
// public void print(@RequestParam(“age2”) int age){
// System.out.println(age);
// }
网页.jsp
在这里插入图片描述
(三)包装数据类型的绑定:
如Integer、Long、Byte、Double、Float、Short,(String 类型在这也是适用的)这里我们以 Integer

和基本数据类型基本一样,不同之处在于,表单传递过来的数据可以为null或”",以上面代码为例,如果表单中num为”",或者表单中无name这个input,那么,Controller方法参数中的name值则为null。
测试代码如下:
/* @RequestMapping("/print")
//Error resolving argument [0] [type=java.lang.Integer]

 //For input string: "vvv" name还可以取值

public void print(Integer name){
    System.out.println(name);
}*/

(四)5、POJO(实体类)类型的绑定
/@RequestMapping("/print")
public void print(Users users){
System.out.println(users);
}
/
public class Users {
private int id;
private String name;
private Date birthday;//转型
封装
}

public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String date) {
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”);//注意格式,页面传值也要一致
try {
return sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
Spring-mvc配置
<mvc:annotation-driven conversion-service=“conversionService”></mvc:annotation-driven>
在这里插入图片描述
注意类的路径。
(五)复合POJO(实体类)类型的绑定
//这里我们增加一个实体类,Datils
//private Datils datils;
封装到users类中
public class Datils {
private String address;
private String tel;
封装
}
public class Users {
private int id;
private String name;
private Date birthday;
private Datils datils;
封装
}
/@RequestMapping("/print")
public void print(Users users){
System.out.println(users);
}
/
页面.jsp
在这里插入图片描述
页面中需要封装类的对象参数来调用。
(六)数组类型的绑定,
控制层函数:
public void array(Integer[]) userId){
for(int i=0:userId){
sout(i);//打印
}
}
(七、List类型的绑定,
@RequestMapping(“selectAllUserAndList”)
public ModelAndView selectAllUserAndList(){
List listUser = userService.selectAllUser();
ModelAndView mv = new ModelAndView();
mv.addObject(“listUser”, listUser);
mv.setViewName(“list”);
return mv;
}

Public void list(UserVo userVo){
sout(userVo.getUserList())
}
由于我们在 JSP 页面 input 输入框定义的name属性名是 userList[${status.index}].id 这种形式的,这里我们直接用 UserVo 就能获取页面批量提交的 User信息
(八)map类型的绑定
首先在 UserVo 里面增加一个属性 Map<String,User> userMap

第二步:JSP页面,注意看 输入框 name 的属性值

第三步:Controller 中获取页面的属性

注:(六,七,八作为了解,平常用的不多)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值