【发布时间】:2021-03-10 04:05:23
【问题描述】:
使用 Jakarta Bean Validation 版本 2 或 3,我如何检查 int 或 Integer 成员字段是否具有一组有限的值?
对于一个人为的过于简化的示例,请考虑这个record 代表一个桶,其容量字段应为 50 或 55。
record Barrel (
UUID id ,
int capacity // Constrain to a value of either 50 or 55.
) {}
➥ 我将如何注释 capacity 字段以确保它只有 50 或 55 作为其数值?
如果capacity 字段的类型为String,我可以将@Pattern 与正则表达式一起使用。
public record Barrel(
@NotNull
UUID id ,
@NotNull
@Pattern ( regexp = "50|55" ) // Constrain to a value of either "50" or "55".
String capacity
) {}
运行它。
package work.basil.example.beanval;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import java.util.Set;
import java.util.UUID;
public class App
{
public static void main ( String[] args )
{
App app = new App();
app.demo();
}
private void demo ( )
{
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Barrel barrel = new Barrel( UUID.fromString( "e78456ac-6f12-45ae-b8e1-c3b8193a920e" ) , "55" );
Set < ConstraintViolation < Barrel > > violations = validator.validate( barrel );
System.out.format( "INFO - Found %d violations.\n" , violations.size() );
violations.forEach( barrelConstraintViolation -> System.out.println( barrelConstraintViolation.getMessage() ) );
}
}
➥ int/Integer 如何获得与String 相同的效果?
【问题讨论】:
-
我认为您需要编写自己的
@Constraint。这将使您可以将注释参数设为int[]。 -
我赞同上面的评论——你必须自己写,而且它相当简单,imo。我们也有很多这些自定义验证器
标签: java integer bean-validation