本文共 3020 字,大约阅读时间需要 10 分钟。
本文作者是从事金融行业及大数据技术的专家,为金融行业相关技术团队提供专业的技术支持,包括系统集成、自动化部署以及分布式微服务开发,同时热衷于技术分享,致力于为开发者提供高质量的技术内容。
博客地址:http://youngitman.tech
CSDN:https://blog.csdn.net/liyong1028826685Spring框架提供了强大的数据绑定和验证功能,能够灵活地处理用户输入和对象属性。以下是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
类提供了多种静态方法,可以用来快速添加验证错误。
Spring的DataBinder
功能可以将用户输入的原始值与应用程序的域模型进行动态绑定。在Web层中,通过@Bind
注解或<spring:bind>
标签进行绑定操作。DataBinder
还支持指定验证逻辑,确保数据的完整性和有效性。
BeanWrapper
是Spring中一个核心组件,能够对 Bean 实例进行属性操作。它支持以下功能:
PropertyChangeListeners
和VetoableChangeListeners
BeanWrapper
通常由DataBinder
和BeanFactory
使用,而不是直接从应用程序代码中使用。
Spring支持通过自定义实现PropertyEditor
来实现属性格式化和转换。以下是一些常用的属性编辑器实现:
ByteArrayPropertyEditor
:处理字节数组转换ClassEditor
:将类名字符串转换为类对象CustomBooleanEditor
:自定义布尔值编辑器CustomDateEditor
:根据DateFormat
格式处理日期通过注册自定义PropertyEditor
,可以实现复杂的属性转换需求。
Spring 3引入了core.convert
包,提供了一套统一的类型转换系统。通过ConversionService
,可以实现从一种类型到另一种类型的转换逻辑。以下是几个关键接口:
Converter
:灵活的类型转换接口ConverterFactory
:用于集成多个转换器GenericConverter
:支持多种源类型和目标类型的转换ConditionalConverter
:基于条件进行转换,只有特定类型或特定注解的字段进行转换为支持本地化和格式化需求,Spring提供了Formatter
SPI。通过实现Printer
和Parser
接口,可以对字段进行格式化处理。以下是一些常见的Formatter
实现:
DateFormatter
:格式化日期NumberStyleFormatter
:格式化数字CurrencyStyleFormatter
:格式化货币PercentStyleFormatter
:格式化百分比通过注解驱动格式化,可以在字段上直接使用格式化规则。
Spring支持Java Bean验证,通过注解约束和自定义ConstraintValidator
实现来定义验证逻辑。以下是自定义约束的示例:
public @interface MyConstraint { @Validated(@Validated(stashed=true)) @Constraint(validatedBy=MyConstraintValidator.class) String name();}
通过配置LocalValidatorFactoryBean
,可以将Bean验证集成到Spring应用中,并支持方法验证和注解驱动验证。
为了使用ConversionService
,需在Spring配置文件中注册转换器:
在字段上使用注解驱动格式化:
public class MyModel { @DateTimeFormat(iso = DateTimeFormat.ISO_DATE) private Date date;}
在控制器中使用DataBinder
进行数据绑定并添加验证:
@Controllerpublic class UserController { @Autowired private DataBinder binder; @GetMapping("/user") public String index(@Validated(ApplicationValidator.class) User user) { binder.validate(); return "index"; }}