Spring 数据绑定使用场景
Spring BeanDefinition 到Bean实例创建
Spring 数据绑定(DataBinder)
Spirng Web 参数绑定(WebDataBinder)
Spirng 数据绑定组件
基本实现方式:
public class DataBinderDemo {
public static void main(String[] args) {
Person person = new Person();
DataBinder dataBinder = new DataBinder(person, "person");
Map<String, Object> source = new HashMap<>();
source.put("id", 1);
source.put("name", "小马哥");
PropertyValues propertyValues = new MutablePropertyValues(source);
dataBinder.bind(propertyValues);
System.out.println(person);
}
}
忽略未知属性:
public class DataBinderDemo {
public static void main(String[] args) {
Person person = new Person();
DataBinder dataBinder = new DataBinder(person, "person");
Map<String, Object> source = new HashMap<>();
source.put("id", 1);
source.put("name", "小马哥");
// 忽略未知属性 也就是说不会有错误只是忽略不存在的属性
source.put("age", 18);
PropertyValues propertyValues = new MutablePropertyValues(source);
dataBinder.bind(propertyValues);
System.out.println(person);
}
}
处理嵌套属性:
public class Person implements BeanNameAware {
private Long id;
private String name;
private Inner inner;
}
public class DataBinderDemo {
public static void main(String[] args) {
Person person = new Person();
DataBinder dataBinder = new DataBinder(person, "person");
Map<String, Object> source = new HashMap<>();
source.put("id", 1);
source.put("name", "小马哥");
// 框架内部帮我们创建了对象并且往里面push了一个值
source.put("inner.name", "李勇");
PropertyValues propertyValues = new MutablePropertyValues(source);
dataBinder.bind(propertyValues);
System.out.println(person);
}
}
通过配置一些参数改变默认的方式:
public class DataBinderDemo {
public static void main(String[] args) {
Person person = new Person();
DataBinder dataBinder = new DataBinder(person, "person");
Map<String, Object> source = new HashMap<>();
source.put("id", 1);
source.put("name", "小马哥");
// 忽略未知属性
source.put("inner.name", "李勇");
PropertyValues propertyValues = new MutablePropertyValues(source);
dataBinder.bind(propertyValues);
// 是否忽略未知字段 这个时候会抛出异常
dataBinder.setIgnoreUnknownFields(false);
dataBinder.setIgnoreInvalidFields(false);
// source.put(inner, new Inner()) 如果改为false 不用于上面这里需要这样写
dataBinder.setAutoGrowNestedPaths(false);
System.out.println(person);
}
}
指定必须字段:
dataBinder.setRequiredFields("name", "id");
获取绑定结果:
// 结果包含了错误信息 和 文案信息
BindingResult bindingResult = dataBinder.getBindingResult();
BeanWrapper
Java Beans 如果操作属性