您的位置:首页 > 编程语言 > Java开发

(2019.7)springMVC——参数绑定

2019-07-12 16:20 260 查看

  所谓参数绑定就是将请求传过来的参数进行相关的处理,这是前后端进行数据交互很重要的一部分。

# # 首先是简单的参数传递

  比方说我发这这样的请求:http://localhost:8080/user/paramTest?username=zhangshan&password=123456

  可以看到的是我传了两个参数,分别是username和password,如果我的controller想要获取参数只需要:

 这样只能满足接受零散的请求参数,一个两个都ok,但是我们知道参数列表是要尽量少的。

 

# # 复杂的参数传递

  比方说是提交一个表单,我们肯定不会一个参数一个参数的传递的,这显然很麻烦,我们一般采用将数据封装到一个 javaBean中去的方式。

  来个demo

  只需要提供一个实体类,然后属性和我们要提交的参数对应起来,才处理的controller上,框架就会帮我们自动的封装到实体类中去。同时这个实体类,还可以有引用类型的属性

[code]public class Account implements Serializable {
private String username;
private String password;
private double money;

//一个引用类型的属性
private Student student;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public double getMoney() {
return money;
}

public void setMoney(double money) {
this.money = money;
}

public Student getStudent() {
return student;
}

public void setStudent(Student student) {
this.student = student;
}

@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", student=" + student +
'}';
}
}

前端页面:

[code]<%@page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<form action="/user/paramTest"method="post">

用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
缴费:<input type="text" name="money"><br>
学生姓名:<input type="text" name="student.name">
学会年龄:<input type="text" name="student.age">
<input type="submit" value="提交">

</form>
</body>
</html>

 这里就应该注意一下了,input框的name属性的值都是我们定义好的实体类的属性的值,名字对应起来。实体类提供set get 方法,就能够将前端页面行的数据存储在对象里边,传递到后台,即使是引用类型,就像student.age,这样对应起来,依然能够传递。

  最后后端想要将数据取出来,也很简单,只需要传参数传入一个实体类对象就可以了:
 

[code]  @RequestMapping("paramTest")
public String paramTest(Account account){
System.out.println(account.getUsername());
System.out.println(account.getPassword());
System.out.println(account.getMoney());
System.out.println(account.getStudent().getName());
System.out.println(account.getStudent().getAge());
return "success";
}

 

 # # 这里有一个神奇的情况, 就是前端向后台提交数据的时候,框架会给我们自动类型转换,比方说是自动将 字符串类型给我们装转成了Integer类型的。 这是框架自定义好的类型转换器。我们用起来,基本上不用自己再写,但是肯定会会有自动转换不了 的情况,这就需要我们自定义类型转换器了。

 自定义的类型转化器如下:

[code]package com.angus.utils;

import org.springframework.core.convert.converter.Converter;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringToDateConverter implements Converter<String, Date> {

public Date convert(String source) {
if (source == null) {
throw new RuntimeException("请传入非空的参数");
}
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
return dateFormat.parse(source);
} catch (Exception e) {
throw new RuntimeException("转换出错");
}
}
}

   这就相当于是自己定义了一个组件,那想要它生效,就要自己去配置它:这个如果整合SSM就放在applicationContext.xml中

如果只是使用spring 的话,就放在springMVC的配置文件中去。

[code]<!-- 自定义类型转化器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.angus.utils.StringToDateConverter"/>
</set>
</property>
</bean>

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: