javax.validation:用于验证字符串长度的约束(以字节为单位)
发布时间:2020-12-15 00:50:29 所属栏目:Java 来源:网络整理
导读:我正在使用 javax.validation来验证一些bean字段的值. 这是我通常使用的: public class Market { @NotNull @Size(max=4) private String marketCode; @Digits(integer=4,fraction=0) private Integer stalls; // getters/setters} 这将确保每个Market实例都
我正在使用
javax.validation来验证一些bean字段的值.
这是我通常使用的: public class Market { @NotNull @Size(max=4) private String marketCode; @Digits(integer=4,fraction=0) private Integer stalls; // getters/setters } 这将确保每个Market实例都有一个市场代码,其最大长度为4个字符,并且具有最多4个整数位和0个十进制数的停顿数. 现在,我使用这个bean从/向DB加载/存储数据. 在数据库我有表格市场定义如下: CREATE TABLE MARKETS ( MARKET_CODE VARCHAR2(4 BYTE) NOT NULL,STALLS NUMBER(4,0) ) 如您所见,我有MARKET_CODE,最多可以有4个字节. @Size注释将检查字符串是否最多4个字符,这是错误的. 所以,问题是:是否有像@Size这样的注释会检查字符串字节而不是字符? 解决方法
检查
Hibernate Validator documentation on Creating custom constraints.
您的验证器需要使用一些默认或指定的Charset将String编码为byte [].我想你可能会使用UTF-8. 也许这样的东西,它使用硬编码的UTF-8编码并假设一个合适的注释,如Hibernate文档中所述. public class MaxByteLengthValidator implements ConstraintValidator<MaxByteLength,String> { private int max; public void initialize(MaxByteLength constraintAnnotation) { this.max = constraintAnnotation.value(); } public boolean isValid(String object,ConstraintValidatorContext constraintContext) { return object == null || object.getBytes(Charsets.UTF_8).length <= this.max; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |