首页 > 解决方案 > 为 Enum 实施过滤器以在插入前检查值

问题描述

我想将可用的用户角色存储到 Enum 中:

public enum Role implements GrantedAuthority {
  ROLE_ADMIN, ROLE_CLIENT;

  public String getAuthority() {
    return name();
  }

}

实体值:

@Column(length = 25)
@Enumerated(EnumType.STRING)
private Role role;

我使用代码创建新用户:

Users user = new Users();
user.setRole(Role.valueOf("ROLE_ADMIN"));

有没有办法检查 ROLE_ADMIN 是一个有效的枚举值,因为我可以破坏它不是有效值的代码。

标签: javahibernateenums

解决方案


您可以在枚举中创建一个特定方法,以了解提供的字符串是否与特定字符串匹配。就像是:

public static Optional<Role> getFromString(String valueToCheck) {
  return Optional.ofNullable(valueToCheck)
            .flatMap(toCheck -> Arrays.stream(Role.values())
                       .filter(r -> toCheck.equals(r.name()))
                       .findFirst());
}

或使用上述方法的另一种方法:

  1. 改变和Optional<Role>使用。Role.orElse(null)
  2. Optional<Role>通过更改Role并使用.orElseThrow(...)来引发异常。

推荐阅读