作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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 加载/存储数据。
在数据库中,我有如下定义的表 Markets
:
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 .
您的 validator 需要使用一些默认或指定的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;
}
}
关于javax.validation : Constraint to validate a string length in bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337002/
我是一名优秀的程序员,十分优秀!