作者:一一哥
在上一章节,SpringBoot2.x系列教程29--整合SpringMVC之@InitBinder处理请求参数的绑定(上)的内容中,我给大家讲解了@InitBinder的原理及使用教程,本章节我继续讲解SpringMVC中的参数传递及数据绑定。
本章节主要是讲解WebDataBinder的内容。
一. WebDataBinder简介从上面的代码案例中,我们可以看到另一个类,那就是WebDataBinder!
1. WebDataBinder的由来在servlet中,有一个方法:request.getParameter("paramName")
,它会根据key返回一个String类型的数据。
但是如果我们这样一个一个地去取出web中的请求参数,那就会很麻烦。我们知道Java中有对象的概念,那有没有办法将request中的请求参数自动封装到一个Java对象中呢? 为了解决这个问题,Spring中引入了WebDataBinder。
2. WebDataBinder类关系WebDataBinder的作用是从web request中把web请求里的parameters
绑定到对应的JavaBean
上!
在Controller方法中的参数类型可以是基本类型,也可以是封装后的普通Java类型。若这个普通的Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数,而WebDataBinder则可以帮助我们实现从Request中取出请求参数并绑定到JavaBean中。
4. WebDataBinder工作机制WebDataBinder是用来绑定请求参数到指定的属性编辑器里的。由于前台传到Controller里的值是String类型,当往Java Bean里设置这个值的时候,如果设置的这个属性是个对象,Spring就会去找到对应的编辑器editor进行转换,然后再设置进去!
Spring自己提供了大量的实现类,诸如CustomDateEditor,CustomBooleanEditor,CustomNumberEditor等,基本上够我们开始使用。
但在平时使用SpringMVC时,可能会碰到Java Bean中有Date类型的参数,表单中传来代表日期的字符串转化为日期类型,SpringMVC在默认时,是不支持这种类型转换的。此时我们就需要手动设置时间格式并在WebDateBinder上注册这个编辑器!
5. 示例代码@InitBinder
public void bindingPreparation(WebDataBinder binder) {
DateFormat dateFormat1 = new SimpleDateFormat("dd-MM-yyyy");
CustomDateEditor orderDateEditor = new CustomDateEditor(dateFormat1, true);
DateFormat dateFormat2 = new SimpleDateFormat("MMM d, YYYY");
CustomDateEditor shipDateEditor = new CustomDateEditor(dateFormat2, true);
binder.registerCustomEditor(Date.class, "orderDate", orderDateEditor);
binder.registerCustomEditor(Date.class, "shipDate", shipDateEditor);
}
二. WebDataBinder实现过程
WebDataBinder一般都要结合@InitBinder来一起使用。
1.创建web项目我们在上一个项目的基础之上直接编写本案例。
项目结构:我们在项目中创建domain包,在该包下创建一个User类。
package com.yyg.boot.domain;
import lombok.Data;
import java.util.Date;
/**
* @Description Description
* @Author 一一哥Sun
* @Date Created in 2020/3/23
*/
@Data
public class User {
private String name;
private String password;
private String email;
private Date birthday;
}
3. Validator接口介绍
- Validator 是一个有两个方法的接口;
- boolean supports(Class clazz) : 检验参数是否验证成功的实例类;
- void validate(Object target, Errors errors) : 如果 supports() 方法返回真, target object 合法. Errors.rejectValue() 方法用一个字段名注册错误信息。
我们创建一个validator包,在该包下面创建一个UserValidator验证类。
package com.yyg.boot.validator;
import com.yyg.boot.domain.User;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
/**
* @Description Description
* @Author 一一哥Sun
* @Date Created in 2020/3/23
*/
@Component
public class UserValidator implements Validator {
/**
* 检验参数是否验证成功的实例类
*/
@Override
public boolean supports(Class clazz) {
//isAssignableFrom()方法是判断是否为某个类的父类,instanceof关键字是判断是否某个类的子类。
return User.class.isAssignableFrom(clazz);
}
/**
* 如果 supports() 方法返回真, target object 合法. Errors.rejectValue() 方法会用一个字段名注册错误信息;
*/
@Override
public void validate(Object target, Errors errors) {
User user = (User)target;
//配置字段验证信息
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "","Username is empty");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "", "Password is empty");
//用户名长度不能小于5个字符
if (user.getName().length()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?