gpt4 book ai didi

javax.validation : Constraint to validate a string length in bytes

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:28 26 4
gpt4 key购买 nike

我正在使用 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 需要使用一些默认或指定的CharsetString 编码为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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com