博客
关于我
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
你可能感兴趣的文章
pip3安装命令重复创建文件‘/tmp/pip-install-xxxxx/package‘失败
查看>>
pipeline项目配置实战
查看>>
Pipenv 与 Conda?
查看>>
QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
查看>>
pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。
查看>>
pipy国内镜像的网址
查看>>
quiver绘制python语言
查看>>
pip下载缓慢
查看>>
PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
查看>>
pip在安装模块时提示Read timed out
查看>>
pkl来存储python字典
查看>>
pkpmbs 建设工程质量监督系统 文件上传漏洞复现
查看>>
PK项目测试,做产品测试有这4大优势!
查看>>
PL/SQL Developer中文版下载以及使用图解(绿色版)
查看>>
pl/sql developer乱码,日期格式等问题解决
查看>>
pl/sql锁
查看>>
QueryPerformanceCounter与QueryPerformanceFrequency
查看>>
Plaid.com的监控系统如何实现与9600多家金融机构的集成
查看>>
platform_driver与file_operations两种方法开发led驱动
查看>>
PlatON共识方案详解:应用CBFT共识协议,提高共识效率
查看>>