springMVC的参数绑定

本文详细讲解了 SpringMVC 的参数绑定。介绍了 SpringMVC 中提交请求的数据通过方法形参接收,涉及参数绑定组件,还说明了默认支持的类型,如 HttpServletRequest 等对象。此外,阐述了基本数据类型、实体类、复合实体类类型的绑定方法及注意事项。

参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller ?这在实际项目开发中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么实现的呢?下面我们来详细的讲解。
1、SpringMVC 参数绑定
在 SpringMVC 中,提交请求的数据是通过方法形参来接收的。从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就可以直接使用该形参。
1484390-20190521162144172-660574474.png

这里涉及到参数绑定组件,那么什么是参数组件,这里可以先理解为将请求的数据转换为我们需要的数据称为参数绑定组件,也就是参数绑定转换器。SpringMVC 内置了很多参数转换器,只有在极少数情况下需要我们自定义参数转换器。

2、默认支持的类型
SpringMVC 有支持的默认参数类型,我们直接在形参上给出这些默认类型的声明,就能直接使用了。如下:
  ①、HttpServletRequest 对象
  ②、HttpServletResponse 对象
  ③、HttpSession 对象
  ④、Model/ModelMap 对象 
代码:

@RequestMapping("/defaultParameter")
public ModelAndView defaultParameter(HttpServletRequest request,HttpServletResponse response,
HttpSession session,Model model,ModelMap modelMap) throws Exception{
request.setAttribute("requestParameter", "request类型");
response.getWriter().write("response");
session.setAttribute("sessionParameter", "session类型");
//ModelMap是Model接口的一个实现类,作用是将Model数据填充到request域
//即使使用Model接口,其内部绑定还是由ModelMap来实现
model.addAttribute("modelParameter", "model类型");
modelMap.addAttribute("modelMapParameter", "modelMap类型");

    ModelAndView mv = new ModelAndView();
    mv.setViewName("view/success.jsp");
    return mv;
}

表单代码:(截取主要代码)


request:${requestParameter}
session:${sessionParameter}
model:${modelParameter}
modelMap:${modelMapParameter}

3、基本数据类型的绑定
java的基本数据类型有八个:byte、short、int、long、double、float、boolean、char

以int类型为例
jsp代码:





 
Controller代码:

@RequestMapping("/basicData")
public void basicData(int username){
System.out.println(username);//10
}
此时需要保证表单的input框的name属性名称与Controller的参数名称一致,否则不能绑定。

4.实体类的绑定
User.java
public class User {
private Integer id;
private String username;
private String sex;

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username == null ? null : username.trim();
}
public String getSex() {
    return sex;
}
public void setSex(String sex) {
    this.sex = sex == null ? null : sex.trim();
}

}

JSP页面:注意输入框的 name 属性值和上面 POJO 实体类的属性保持一致即可映射成功。

用户id: 用户名: 性别:

5.复合实体类类型的绑定(一个类依赖另一个类)
新建一个类ContactInfo
public class ContactInfo {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address == null ? null : address.trim();
}
}

在User.java中增加一个属性 private ContactInfo contactInfo
public class User {
private Integer id;
private String username;
private String sex;
private ContactInfo contactInfo;
}

JSP 页面:注意地址框的name命名与User.java 的复合属性名.字段名
1484390-20190521162336651-1026198896.jpg

Controller代码
1484390-20190521162401695-1408332959.png
JSP 页面:注意属性name的命名,User.java 的复合属性名.字段名

转载于:https://www.cnblogs.com/keyforknowledge/articles/10900560.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值