我有一个这样的实体:
@Entity
@Table(name = "MyTable", schema = "test")
@Getter @Setter
public class PurgeSystemsEntity {
@Id
@Column(name = "id", nullable = false)
private int id;
@Column(name = "system_name", nullable = false, length = 255)
private String systemName;
.
.
}
如何验证在systemName
字段中从DB(类似于执行.findAll()
时(获得的字符串是否是EnumSystem
:中定义的可能选项之一
public static enum System {
PROD, DEV, QA;
}
因此,如果一行的systemName
值为"STAGING",它应该立即抛出异常。
有什么优雅的方法吗?
将字段类型设置为枚举。
@Column(name = "system_name", nullable = false, length = 255)
@Enumerated(EnumType.STRING)
private System systemName;
如果遇到枚举中未定义的值,这将导致错误。
您还必须显式设置EnumType.STRING
,因为它默认为EnumType.ORDINAL
,这将对应于枚举序数值,而不是名称
您可以在ENUM
中编写自己的方法
类似的东西
public static MyEnum fromValue(String value) {
for (MyEnum b : MyEnum.values()) {
if (b.value.equals(value)) {
return b;
}
}
throw new IllegalArgumentException("Unexpected value '" + value + "'");
}
或者,如果Enum是类的一部分,我认为Java应该自动处理并在值无法映射的情况下抛出IllegalArgumentException!