在上一篇博客的基础之上,我们今天实现浏览器端数据的绑定,包括了基本类型的绑定、包装类型的绑定、数组的绑定、简单对象的绑定、复杂对象的绑定、同属性名的多个对象的绑定、List绑定等
- 在pojo目录下,新建一个User类
package com.mvcdemo.pojo;
/**
* 功能描述:
*
* @ClassName: User
* @Author: Chentingxuan
* @Date: 2019-03-01 10:18
* @Version: V1.0
*/
public class User {
private String name;
private String password;
private UserDetails userDetails;
public User() {
}
public User(String name, String password, UserDetails userDetails) {
this.name = name;
this.password = password;
this.userDetails = userDetails;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UserDetails getUserDetails() {
return userDetails;
}
public void setUserDetails(UserDetails userDetails) {
this.userDetails = userDetails;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
", userDetails=" + userDetails +
'}';
}
}
- 在pojo目录下新建一个UserDetails类
package com.mvcdemo.pojo;
/**
* 功能描述:用户详细信息类
*
* @ClassName: UserDetails
* @Author: Chentingxuan
* @Date: 2019-03-01 10:19
* @Version: V1.0
*/
public class UserDetails {
private String qq;
private String email;
public UserDetails() {
}
public UserDetails(String qq, String email) {
this.qq = qq;
this.email = email;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "UserDetails{" +
"qq='" + qq + '\'' +
", email='" + email + '\'' +
'}';
}
}
- 在pojo目录下,新建一个ListStudentForm类,用于封装list数据
package com.mvcdemo.pojo;
import java.util.List;
/**
* 功能描述:用于封装list数据
*
* @ClassName: ListStudentForm
* @Author: Chentingxuan
* @Date: 2019-03-01 10:23
* @Version: V1.0
*/
public class ListStudentForm {
private List<Student> stus;
public ListStudentForm() {
}
public ListStudentForm(List<Student> stus) {
this.stus = stus;
}
public List<Student> getStus() {
return stus;
}
public void setStus(List<Student> stus) {
this.stus = stus;
}
@Override
public String toString() {
return "ListStudentForm{" +
"stus=" + stus +
'}';
}
}
- 在controller包下,新建一个DataBindController类,用于绑定相应的数据类型
package com.mvcdemo.controller;
import com.mvcdemo.pojo.ListStudentForm;
import com.mvcdemo.pojo.Student;
import com.mvcdemo.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 功能描述:数据绑定
*
* @ClassName: DataBindController
* @Author: Chentingxuan
* @Date: 2019-03-01 08:47
* @Version: V1.0
*/
@Controller
@RequestMapping("/dataBind")
public class DataBindController {
//基本类型绑定
@RequestMapping(value = "/baseType",method = RequestMethod.GET)
@ResponseBody //加上这个注解以后,返回的就不是页面了
public String baseType(@RequestParam("age") int age){
return "age:" + age;
}
//包装类型绑定
@RequestMapping(value = "/baseType2",method = RequestMethod.GET)
@ResponseBody //加上这个注解以后,返回的就不是页面了
public String baseType2(Integer age){//相较于基本类型,它有更好地稳定性,当前端值为空的时候,也能显示,服务器不会崩掉
return "age:" + age;
}
//数组绑定
@RequestMapping(value = ("/array"),method = RequestMethod.GET)
@ResponseBody
public String array(String[] strs){
String result="";
StringBuffer sb= new StringBuffer(result);
/*
for (String str : strs)和下面的代码等价
for(int i = 0;i < s.length(); i++){
String str = s[i]; //当成数组的写法
}
*/
for (String str : strs){
sb.append(str + " ");
}
return "array:" + sb.toString();
}
//简单对象绑定
@RequestMapping(value = ("/object"),method = RequestMethod.GET)//浏览器通过输入../object/student.name=***&student.sex=**
@ResponseBody
public String object(Student student){
return student.toString();
}
//复杂对象绑定
@RequestMapping(value = "/object2", method = RequestMethod.GET)//浏览器通过输入../object2/user.name=***&user.userDetails.qq=**
@ResponseBody
public String object2(User user) {
return user.toString();
}
//同属性名的多个对象绑定
@RequestMapping(value = "object3", method = RequestMethod.GET)//浏览器通过输入../object3/student.name=***&user.name=**
@ResponseBody
public String object3(Student student, User user) {
return "Student:" + student.toString() + "User:" + user.toString();
}
//List绑定
@RequestMapping(value = "list", method = RequestMethod.GET)//tomcat9.0以上,对这种访问进行了限定,会导致400错误
@ResponseBody
public String list(ListStudentForm studentForm) {
return studentForm.toString();
}
}
- 运行效果
5.1 基本类型的绑定
5.2 包装类型的绑定
5.3 数组类型的绑定
5.4 简单对象的绑定
5.5 复杂对象的绑定
源代码:完整代码