【发布时间】:2018-09-04 05:52:01
【问题描述】:
我有一个请求WorkerRequest,其中有一个enum,其中有FULL_TIME、MANAGER 等等。
在WorkerRequest 中,如何在此枚举上应用长度验证?
示例:枚举类型不应超过 8 个字符。
FULL_TIME 有效(8 个字符)
PERMANENT 无效(9 个字符)
目前如果我输入javax.validation.constraints.Size
@Size(min = 0, max = 8, message = "Allowed length for workerType is 8.")
@Enumerated(EnumType.STRING)
private WorkerType workerType;
它会抛出一个错误:
HV000030:找不到约束的验证器 'javax.validation.constraints.Size' 验证类型 'com.XX.XX.XX.WorkerType'。 检查“workerType”的配置
【问题讨论】:
-
创建自己的验证,并检查大小,不是 enum_type,而是 enum_type.name();
-
Currently
enum_type.name()对这两个常量的长度相同,均为 9 个字符。而不是重命名常量以匹配所需的长度,它会更好,例如覆盖toString()并检查其长度或引入专用方法。 -
@LuCio 取决于。一旦它是一个字符串,就很容易过滤掉您不想考虑的下划线和其他字符。
-
@Stultuske 好的。如果您只想在某个位置过滤枚举并且不想在枚举中定义它,那么这就是要走的路。
-
有可能,在某些地方您不希望进行该验证,或者您希望验证的行为有所不同。枚举本身不应该知道验证。例如,如果你有一个在 MY_ENUM.isValid() 上会返回 false 的枚举......你为什么还要从这个枚举开始呢?
标签: java spring validation spring-boot enums