-
SpringMVC——Map的数据绑定
案例:同样需要一个类UserMapForm,声明一个私有的Map<String,User> users,并提供set/get方法和toString方法,Controller中,如下图二。
参数的传递方式:查看全部 -
SpringMVC——Set的数据绑定
案例:Set应用场景,抽象一个Student对象,有一个name属性和一个Email属性,提交信息时候,需要把学生1和学生2的name和Email同时绑定到后台,Set和List还是有一些区别的,它需要先初始化Set(也就是Set集合的长度要大于0,这里在提供集合的类里对Set初始化,添加若干元素),而List是不需要的,而且Set数据绑定在实际应用中,经常用作对象的重复判断,或者排除重复,例如:Student对象有一个name和Email,如果name和Email都相等时,那么这个对象是重复的,会重写hashcode方法和equals方法,然后在里面写重复判断的逻辑,SpringMVC对于Set集合的绑定,如果学生1和学生2传来的name和Email是一样的就会绑定到一个对象上。
访问地址:
SpringMVC对Set类型数据绑定支持不够好
如果实体类Student重写了equals和hashcode方法,那么再次绑定就会绑定一个对象,也就是集合中只有一个对象,如图一,当我我们在url中通过http://localhost:8080/setParam?set[0].name=Tom&set[1].name=Tom传参数时,会报错,对于集合绑定优先使用List进行绑定。
查看全部 -
本章主要介绍List、Set、Map结构的数据绑定以及坑
知识点1:List的数据绑定
案例:后台抽象一个Student对象,有一个name属性和一个Email属性,提交信息时候,需要把学生1和学生2的name和Email同时绑定到后台,List就应用到这种场景,SpringMVC对于集合绑定,需要专门创建一个类提供一个集合,并且集合的泛型为User,如图二,也就是Controller的方法里使用提供集合的类作为参数,如图3,这里访问的是下一级,也就是使用提供集合类的属性users传入参数,list.do?users[0].name=Tom&users[1].name=Lucy,如果url中下标直接写20,则这个数组的长度为21,也就是数组中有很多空对象,请求的索引一定是连续的,否则浪费内存资源,如最后一张图。
查看全部 -
SpringMVC绑定数据——同属性的多对象(两个类具有相同的属性)
@InitBinder注解:访问Controller时,执行相应方法前,会首先执行该注解下的方法进行一个初始化,然后再执行相应的方法。
案例:User类和Admin类具有相同的属性name和age,如果直接在请求中传入name=?&age=?,那么User类和Admin类的属性都会被赋值为相同的值,如果想区分并赋值,如下图。
查看全部 -
本章主要介绍简单对象、复杂对象的数据绑定以及常遇到的问题
SpringMVC数据绑定——简单对象、多层级对象、同属性对象。
简单对象:首先需要创建一个对象类,然后在Controller的方法里引用该对象。
多层级对象:方法参数里的对象里面有一个依赖其它类的属性
查看全部 -
包装类和数组的处理
SpringMVC绑定数据——包装类:可以不传key,可以不给方法参数传值,但是如果使用@RequestParam修饰了就必须给数据传值。
SpringMVC绑定数据——数组
查看全部 -
SpringMVC数据绑定——基本类型处理
@ResponseBody:方法的返回值,会放到Response的body的数据区里。
@RequestParam:有三个属性value、required、defaultValue,value是给传入的参数起别名,required是必须要传入的参数,默认为true,defaultValue代表如果不传会赋予默认值。
查看全部 -
SpringMVC数据绑定——基本类型、包装类型、数组类型绑定
例如:age属性可以使用int和Integer进行修饰。
【a】使用基本类型int修饰age属性:key是必须传的(并且必须传入value),并且age的value范围和类型必须是int类型范围,如果传入的参数是字符串则会报400错误异常,如果没有传age,则会报500错误。
【b】使用包装类型Integer修饰age属性:可以不用传入key,Integer类型的age可以为null,所以开发过程中对于可能为空的数据设置为包装类型,当然也需要@RequestParam注解对其进行配置。
使用数组进行数据绑定:一次可以传多个,可以是基本类型、包装类型、String的对象类型。
查看全部 -
Intellij IDEA简介以及创建SpirngMVC项目
eclipse————intellij idea
workspace project
project module
查看全部 -
SpringMVC数据绑定课程概述
【一】数据绑定概念:简单绑定是将一个用户界面元素(控件)的属性绑定到一个类型(对象)实例上的某个属性的方法。
【二】IDE——intellij idea简介以及intellij idea创建springMVC项目。
【三】基本类型、包装类型(例如:年龄是使用int还是Integer)、数组类型的数据绑定。
【四】简单对象、多层级对象、同属性多对象的数据绑定。
【五】List、Set、Map数据结构的数据绑定。
【六】Json和Xml数据结构的数据绑定(Json和Xml的数据传输在实际应用经常使用,因为某些对象数据结构比较复杂)。
【七】PropertyEditor、Formatter、Converter,创建局部类型转换器和全局类型转换器。
【八】RESTful扩展及应用场景
【九】课程总结(总结重点知识点和碰到的问题以及避免的问题)
查看全部 -
自定义一个converter
/** * A converter converts a source object of type {@code String} to a target of type {@code Date}. */ public class MyConverter implements Converter<String,Date>{ @Override public Date convert(String s) { try { return DateUtil.S_DAY_DATEFORMAT.parse(s); } catch (ParseException e) { e.printStackTrace(); } return null; } }
配置自定义converter
@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { // @Bean // public Formatter<Date> myDateFormatter(){ // return new MyDateFormatter(); // } // // @Override // public void addFormatters(FormatterRegistry registry) { // registry.addFormatter(myDateFormatter()); // super.addFormatters(registry); // } @Bean public Converter myConverter(){ return new MyConverter(); } }
使用
/** *date:2018-05-24 * @param date */ @PostMapping("date") public void dateType(Date date){ System.out.println(date); }
查看全部 -
定义一个日期格式化工具类
public class DateUtil { public static SimpleDateFormat S_STANDARD_DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static SimpleDateFormat S_DAY_DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd");
自定义Formatter
public class MyDateFormatter implements Formatter<Date>{ @Override public Date parse(String text, Locale locale) throws ParseException { return DateUtil.S_DAY_DATEFORMAT.parse(text); } @Override public String print(Date object, Locale locale) { return DateUtil.S_DAY_DATEFORMAT.format(object); } }
注册自定义的formatter
@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Bean public Formatter<Date> myDateFormatter(){ return new MyDateFormatter(); } @Override public void addFormatters(FormatterRegistry registry) { registry.addFormatter(myDateFormatter()); super.addFormatters(registry); } }
测试使用
/** *date:2018-05-24 * @param date */ @PostMapping("date") public void dateType(Date date){ System.out.println(date); } /** *date2:2018-05-24 * @param date2 */ @PostMapping("date2") public void dateType2(Date date2){ System.out.println(date2); } // /** // * InitBinder注解的value为指定requestParam的name // * 此注解的作用范围在自身所在controller内 // * @param binder // */ // @InitBinder({"date"}) // public void initDate(WebDataBinder binder){ // //指定处理类型,自定义数据处理器,处理器允许requestParam值为空 // binder.registerCustomEditor(Date.class,new CustomDateEditor(DateUtil.S_DAY_DATEFORMAT,true)); // }
查看全部 -
/** *date:2018-05-24 * @param date */ @PostMapping("date") public void dateType(Date date){ System.out.println(date); } /** *date:2018-05-24 * @param date2 */ @PostMapping("date2") public void dateType2(@RequestParam("date") Date date2){ System.out.println(date2); } /** * InitBinder注解的value为指定requestParam的name * 此注解的作用范围在自身所在controller内 * @param binder */ @InitBinder({"date"}) public void initDate(WebDataBinder binder){ //指定处理类型,自定义日期数据处理器,处理器允许requestParam值为空 binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true)); }
查看全部 -
老师的方式,请求参数为item[n]:name=xx&item[m]:name=xxx,也可以传递json字符串
一、封装list的类
import lombok.Data; import java.util.List; @Data public class FromAdminList { List<Admin> admins; }
二、使用封装了list的类接受
/** * [ { "username": "John", "password": "Doe", "age":"11" }, { "username": "Anna", "password": "Smith", "age":"11" }, { "username": "Peter", "password": "Jones", "age":"11" } ] * @param admins */ @PostMapping("admins") public void listTypeObj(FromAdminList admins){ System.out.println(admins); }
另一种方式,使用@RequestBody,请求参数为json字符串格式,前提是有json的转换器
一、向list类型参数加上注解@RequestBody
/** [ { "username": "John", "password": "Doe", "age":"11" }, { "username": "Anna", "password": "Smith", "age":"11" }, { "username": "Peter", "password": "Jones", "age":"11" } ] * @param admins */ @PostMapping("adminlist") public void listTypeObj(@RequestBody List<Admin> admins){ System.out.println(admins); }
对于基本类型,string都有效
/** * [ "adb", "xixi", "多久啊送到家" ] * @param info */ @PostMapping("strs") public void listTypeStr(@RequestBody List<String> info){ System.out.println(info); } /** [ 1, 2, 3 ] * @param info */ @PostMapping("Ints") public void listTypeBase(@RequestBody List<Integer> info){ }
查看全部 -
包装类可以为空
查看全部
举报