JSR349(Bean Validation 1.1)

1、新增变化

1.1 依赖注入

Bean Validation使用组件MessageInterpolator, TraversableResolver, ParameterNameProvider, ConstraintValidatorFactory和ConstraintValidator。

Bean Validation 1.1标准化了容器管理对象的使用方式以及这些对象如何从容器服务中受益

1.2 方法验证

支持方法及构造函数的参数及返回值约束。

1.3 集成上下文及依赖注入

与上下文和依赖项注入(CDI)的集成点已经增加和修改。这在JavaEE和JavaSE中实现更自然、更标准的集成,包括依赖注入、组件生命周期管理和方法验证拦截

1.4 组转换

该规范提供了一种在发生验证级联时更改目标组的方法。此功能是对于重用给定对象(图)和避免不同对象子图之间的组泄漏特别有用。还可以创建更可读的约束

1.5 一致表达式语言消息插值

约束冲突消息现在可以使用EL表达式进行更灵活的渲染和字符串格式设置。特别是在EL上下文中注入格式化程序对象,以将数字、日期等转换为特定于语言环境的字符串表示形式。同样,验证值在EL上下文中也可用

2、约束定义

2.1 约束注解

新增

ConstraintTarget validationAppliesTo() default ConstraintTarget.IMPLICIT;

validationAppliesTo仅应该出现在泛型或者交叉参数约束中。ConstraintTarget类型有

public enum ConstraintTarget {
    IMPLICIT,
    RETURN_VALUE,
    PARAMETERS
}

2.2 接口变化

ConstraintValidatorContext新增T unwrap(Class<T> type)
ConstraintViolationBuilder新增

NodeBuilderCustomizableContext addPropertyNode(String name);
LeafNodeBuilderCustomizableContext addBeanNode();
NodeBuilderDefinedContext addParameterNode(int index);

ConstraintValidatorFactory新增

void releaseInstance(ConstraintValidator<?, ?> instance)

3、约束声明以及验证过程

3.1 组转换

执行级联验证时,@ConvertGroup注解。

@Target({ TYPE, METHOD, FIELD, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
public @interface ConvertGroup {
    Class<?> from();
    Class<?> to();

    @Target({ TYPE, METHOD, FIELD, CONSTRUCTOR, PARAMETER })
    @Retention(RUNTIME)
    @Documented
    public @interface List {
        ConvertGroup[] value();
    }
}

有多个转换规则,而from是相同时是不合法的

from不能指向组序列

3.2 方法和构造函数约束

3.2.1 方法验证的要求

静态方法不参与验证

3.2.2 声明参数约束

放在方法或者构造函数参数上

3.2.3 交叉参数约束

用于表示基于方法参数值的约束,在方法或者构造函数上声明。

在没有参数的方法或者构造函数上声明交叉参数约束不合法,会抛ConstraintDeclarationException异常

3.2.4 命名参数

3.2.5 继承体系下的方法约束

前置条件在子类型中不应该增强

后置条件在子类型中不应该减弱

4、Validation API

Validator新增

ExecutableValidator forExecutables()

ConstraintViolation新增

Object[] getExecutableParameters();
Object getExecutableReturnValue();
<U> U unwrap(Class<U> type);

5、Constraint metadata request APIs

 

参考资料:

https://beanvalidation.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值