【发布时间】:2018-02-19 12:45:39
【问题描述】:
如何在我的 Spring Boot Rest 应用程序中使用 Redis 指定 15-25 个符号的“ID”长度约束?
@RedisHash("Foo")
public class Foo implements Serializable {
@Id
private Long id;
@Indexed
private Status status;
}
更新
我尝试将id 类型更改为String 并设置Size 以限制符号长度,但在Redis db 使用范围内不起作用(似乎Size 注释被忽略):
@RedisHash("Foo")
public class Foo implements Serializable {
@Id
@Size(min = 15, max = 25)
private String id;
@Indexed
private Status status;
}
我也尝试过使用自定义验证器,并且行为相同 - 使用 Redis db 时似乎它被忽略了:
@Documented
@Constraint(validatedBy = DigitsLimitValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DigitsLimit {
String message() default "Digits length is too short or long";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
int min() default 5;
int max() default 15;
}
验证器:
public class DigitsLimitValidator implements ConstraintValidator<DigitsLimit, BigInteger> {
private int min;
private int max;
@Override
public void initialize(DigitsLimit value) {
min = value.min();
max = value.max();
}
@Override
public boolean isValid(BigInteger value, ConstraintValidatorContext cxt) {
return value != null && BigIntegerMath.log10(value, RoundingMode.FLOOR) + 1 >= min && BigIntegerMath.log10(value, RoundingMode.FLOOR) + 1 <= max;
}
}
型号:
@RedisHash("Foo")
public class Foo implements Serializable {
@Id
@DigitsLimit(min = 15, max = 25)
private BigInteger id;
@Indexed
private Status status;
}
在调试模式下,我无法在验证器中捕获任何断点。
在这两种尝试中,我都可以保存任意长度的数字。限制被忽略。为什么会被忽略?
【问题讨论】:
标签: java spring-boot redis spring-data-redis