博客
关于我
Spring 5 中文解析之核心篇-数据绑定、校验和类型转换
阅读量:877 次
发布时间:2019-03-21

本文共 3020 字,大约阅读时间需要 10 分钟。

Spring框架中的数据绑定与验证详解

关于作者

本文作者是从事金融行业及大数据技术的专家,为金融行业相关技术团队提供专业的技术支持,包括系统集成、自动化部署以及分布式微服务开发,同时热衷于技术分享,致力于为开发者提供高质量的技术内容。

博客地址:http://youngitman.tech

CSDN:https://blog.csdn.net/liyong1028826685


Spring框架中的数据绑定与验证

Spring框架提供了强大的数据绑定和验证功能,能够灵活地处理用户输入和对象属性。以下是Spring中核心的技术点和实现细节。

1. Spring的校验接口与实现

Spring提供了一个Validator接口,该接口用于定义校验逻辑。对于普通对象的验证,可以通过实现Validator接口的方法validate进行业务逻辑验证。以下是Person类的校验实现示例:

public class PersonValidator implements Validator {    @Override    public boolean supports(Class
clazz) { return Person.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { // 验证name字段不为空 ValidationUtils.rejectIfEmpty(errors, "name", "name.empty"); // 验证年龄是否在合理范围内 Person p = (Person) target; if (p.getAge() < 0) { errors.rejectValue("age", "negativevalue"); } else if (p.getAge() > 110) { errors.rejectValue("age", "too.darn.old"); } }}

此外,ValidationUtils类提供了多种静态方法,可以用来快速添加验证错误。

2. 数据绑定与Spring的数据绑定

Spring的DataBinder功能可以将用户输入的原始值与应用程序的域模型进行动态绑定。在Web层中,通过@Bind注解或<spring:bind>标签进行绑定操作。DataBinder还支持指定验证逻辑,确保数据的完整性和有效性。

3. BeanWrapper与属性操作

BeanWrapper是Spring中一个核心组件,能够对 Bean 实例进行属性操作。它支持以下功能:

  • 属性值的设置与获取(单个或批量操作)
  • �嵌套属性的处理
  • 添加PropertyChangeListenersVetoableChangeListeners
  • 支持索引属性(如数组、列表等)

BeanWrapper通常由DataBinderBeanFactory使用,而不是直接从应用程序代码中使用。

4. 自定义属性编辑器

Spring支持通过自定义实现PropertyEditor来实现属性格式化和转换。以下是一些常用的属性编辑器实现:

  • ByteArrayPropertyEditor:处理字节数组转换
  • ClassEditor:将类名字符串转换为类对象
  • CustomBooleanEditor:自定义布尔值编辑器
  • CustomDateEditor:根据DateFormat格式处理日期

通过注册自定义PropertyEditor,可以实现复杂的属性转换需求。

5. 类型转换与ConversionService

Spring 3引入了core.convert包,提供了一套统一的类型转换系统。通过ConversionService,可以实现从一种类型到另一种类型的转换逻辑。以下是几个关键接口:

  • Converter:灵活的类型转换接口
  • ConverterFactory:用于集成多个转换器
  • GenericConverter:支持多种源类型和目标类型的转换
  • ConditionalConverter:基于条件进行转换,只有特定类型或特定注解的字段进行转换

6. 格式化与Spring的Formatter

为支持本地化和格式化需求,Spring提供了Formatter SPI。通过实现PrinterParser接口,可以对字段进行格式化处理。以下是一些常见的Formatter实现:

  • DateFormatter:格式化日期
  • NumberStyleFormatter:格式化数字
  • CurrencyStyleFormatter:格式化货币
  • PercentStyleFormatter:格式化百分比

通过注解驱动格式化,可以在字段上直接使用格式化规则。

7. Bean验证与约束配置

Spring支持Java Bean验证,通过注解约束和自定义ConstraintValidator实现来定义验证逻辑。以下是自定义约束的示例:

public @interface MyConstraint {    @Validated(@Validated(stashed=true))    @Constraint(validatedBy=MyConstraintValidator.class)    String name();}

通过配置LocalValidatorFactoryBean,可以将Bean验证集成到Spring应用中,并支持方法验证和注解驱动验证。


配置与使用示例

1. 配置ConversionService

为了使用ConversionService,需在Spring配置文件中注册转换器:

2. 注解驱动格式化

在字段上使用注解驱动格式化:

public class MyModel {    @DateTimeFormat(iso = DateTimeFormat.ISO_DATE)    private Date date;}

3. 数据绑定与验证

在控制器中使用DataBinder进行数据绑定并添加验证:

@Controllerpublic class UserController {    @Autowired    private DataBinder binder;    @GetMapping("/user")    public String index(@Validated(ApplicationValidator.class) User user) {        binder.validate();        return "index";    }}

参考资源

  • 博客地址:http://youngitman.tech
  • CSDN文章:https://blog.csdn.net/liyong1028826685
你可能感兴趣的文章
MySQL 基础架构
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 备份 Xtrabackup
查看>>
mYSQL 外键约束
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>