spring mvc 数据绑定

提升自己,想进入大型互联网公司。欢迎关注我的微信公众号  ,搜索微信公众号:"一起写程序" ,会分享系列文章,希望大家能一起学习。

在这里插入图片描述

目录

问题)数据绑定?... 1

问题1)方法参数选择Integer包装类还是int类型?... 1

问题2)数组的数据绑定?... 2

问题3)简单对象绑定,和多层对象绑定?... 2

问题4)多对象,相同的参数名称?... 3

问题5)list的数据绑定?... 3

问题6)set数据的绑定?... 4

 

 

问题)数据绑定?

前端输入和后端的数据对应。

 

问题1)方法参数选择Integer包装类还是int类型?

  1. 如果参数使用int非封装类型,而不传值,就报500错误。

@Controller
@RequestMapping
("/test/")
public class test {
   
@RequestMapping("check.do")
   
@ResponseBody
   
public String check(int age){
       
return "age:"+age;
   
}
}

 

  1. 使用Integer类型,就不需要必须传值。

默认值是null。

@RequestMapping("check01.do")

@ResponseBody

public String check01(Integer age){

    return "age:"+age;

}

 

  1. 使用int作为参数类型,也可以用@RequestParam,设置默认值。

RequestParam有3个参数: value是别名,defaultValue是默认值,required是否必须传入值默认为true是必须传值。

 

@Controller

@RequestMapping("/test/")

public class test {

    @RequestMapping("check.do")

    @ResponseBody

    public String check(@RequestParam(value = "age",defaultValue = "0",required = false) int age){

        return "age:"+age;

    }

}

 

问题2)数组的数据绑定?


/**

 * 不传值会报错。

 *http://localhost:8088/test/array.do?name=jia&name=cui

 */

@RequestMapping("array.do")

@ResponseBody

public String arrays(String [] name){

    StringBuilder stringBuilder = new StringBuilder();

    for (String item : name){

        stringBuilder.append(item).append(" ");

    }

    return stringBuilder.toString();

}

 

 

问题3)简单对象绑定,和多层对象绑定?

/**

 *  传入简单对象。user对象中不包含info参数。

 *  http://localhost:8088/test/user.do?name=jia&age=10

 */

@RequestMapping("user.do")

@ResponseBody

public String user(user user){

    return user.toString();

}



/**

 * 传入多个对象,user对象包含info对象。

 *http://localhost:8088/test/users.do?name=jia&age=10&info.phone=12345&info.add=%E5%8C%97%E4%BA%AC

 */

@RequestMapping("users.do")

@ResponseBody

public String users(user use){

    return use.toString();

}

 

 

 

问题4)多对象,相同的参数名称?


 * 1,如果 不用bind绑定。通过 use.name & adm.name ,都不会赋值,都为null.
 *  http://localhost:8088/test/auser.do?use.name=jia&age=10&adm.name=kkk
 *2,使用
@InitBinder,可以实现多对象,相同参数。

 http://localhost:8088/test/auser.do?use.age=10&adm.age=4


 */

@RequestMapping("auser.do")

@ResponseBody

public String douUser(user use,admin adm){

    return use.toString()+adm.toString();

}



@InitBinder("user")

public void initUser(WebDataBinder binder){

    binder.setFieldDefaultPrefix("use.");

}

@InitBinder("admin")

public void initAdmin(WebDataBinder binder){

    binder.setFieldDefaultPrefix("adm.");

}
 
 

 

 

问题5)list的数据绑定?

Springmvc收集数据要有指定的对象。通过对象的下一级直接赋值。

例如user对象中有一个name属性,url中直接使用name = 值就好,只有多个对象的时候才会加类名。

 

/**

 * 注意:

 * 1,list接收的时候,得有一个接收对象,参数不能是List<user> user。而是要自定义的userList

 * 2,传入的参数数组下标要连续,不连续的数据会被传入null这样会连服资源。

 * http://localhost:8088/test/listuser.do?user[0].name=jia&user[1].name=shaokun

 *

 * 1,在输入的时候,数组的地址要连续,要不然会产生很多空的对象。

 * http://localhost:8088/test/listuser.do?user[0].name=jia&user[5].name=shaokun

 */

@RequestMapping("listuser.do")

@ResponseBody

public String listUser(userList userlist){

    return userlist.toString();

}
 

自定义接收前端数据的list.不能用List<user>直接接收前端的数据。

public class userList {

    private List<user> user;



    public List<com.mall.common.user> getUser() {

        return user;

    }



    public void setUser(List<com.mall.common.user> user) {

        this.user = user;

    }



    @Override

    public String toString() {

        return "userList{" +

                "user=" + user +

                '}';

    }

}

 

 

 

 

问题6)set数据的绑定?

Set的是使用:

  1. set需要先初始化,list不需要先初始化。没有初始化会抛出异常。
  2. set主要的用途就是去除重复的对象或数据。
  3. 一般使用set就需要重写比较对象的equal和hashcode方法。
  4. 如果使用的set集合下标越界,也会报错。初始化多少个,就用多少个set.
  5. 当重写了equal和hashcode方法,直接在set中添加,new 对象。如果对象相等,会只保留一份。
  6. 传入两个参数会报错,因为下面的创建两个对象创建的时候是直接new student()。

http://localhost:8088/test/set.do?students[0].name=jia&students[1].name=shaokun

7,传入一个参数才是正确的。

http://localhost:8088/test/set.do?students[0].name=jia

  1. @RequestMapping("set.do") @ResponseBody public String setStudent(userSet userset){     return userset.toString(); }

接收前端数据集合:

public class userSet {

    private Set<student> students;



    /**

     * 因为set需要初始化。超过下标会报错。

     */

    private userSet(){

        students = new LinkedHashSet<student>();

        students.add(new student());

        students.add(new student());

    }



    public Set<student> getStudents() {

        return students;

    }



    public void setStudents(Set<student> students) {

        this.students = students;

    }



    @Override

    public String toString() {

        return "userSet{" +

                "students=" + students +

                '}';

    }

}

 

 

public class student {

    String name;

    int age;



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public int getAge() {

        return age;

    }



    public void setAge(int age) {

        this.age = age;

    }



    @Override

    public String toString() {

        return "student{" +

                "name='" + name + '\'' +

                ", age=" + age +

                '}';

    }



    @Override

    public boolean equals(Object o) {

        if (this == o) return true;

        if (o == null || getClass() != o.getClass()) return false;



        student student = (student) o;



        if (age != student.age) return false;

        return name != null ? name.equals(student.name) : student.name == null;

    }



    @Override

    public int hashCode() {

        int result = name != null ? name.hashCode() : 0;

        result = 31 * result + age;

        return result;

    }

}

 

 

 

问题7)map的数据绑定?

1,map是做键值对的,前端可以传入键值对方式。

 

 

/**

 *

 * http://localhost:8088/test/map.do?map['x'].name=jia&map['x'].age=10

 */

@RequestMapping("map.do")

@ResponseBody

public String mapStudent(userMap map){

    return map.toString();

}

 

public class userMap {

    Map<String,student> map;



    public Map<String, student> getMap() {

        return map;

    }



    public void setMap(Map<String, student> map) {

        this.map = map;

    }



    @Override

    public String toString() {

        return "userMap{" +

                "map=" + map +

                '}';

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值