java - 为 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 是一个有效的枚举值,因为我可以破坏它不是有效值的代码。
解决方案
您可以在枚举中创建一个特定方法,以了解提供的字符串是否与特定字符串匹配。就像是:
public static Optional<Role> getFromString(String valueToCheck) {
return Optional.ofNullable(valueToCheck)
.flatMap(toCheck -> Arrays.stream(Role.values())
.filter(r -> toCheck.equals(r.name()))
.findFirst());
}
或使用上述方法的另一种方法:
- 改变和
Optional<Role>
使用。Role
.orElse(null)
Optional<Role>
通过更改Role
并使用.orElseThrow(...)
来引发异常。
推荐阅读
- node.js - 如何使用 ckeditor 在 mongoose-node 应用程序中上传图像。文件将上传到 s3
- qt - 使用 QMediaplayer 从缓冲区播放视频并在视频播放时附加缓冲区
- c# - 从字符串中删除 HTML -- 注释
- ios - 我可以使用 Siri Shortcut 更改变量的值吗?
- javascript - 为什么我的 add like 方法返回“无法读取未定义的属性”?
- swift - 如何从另一个类更改一个类中声明的变量值?
- java - 有没有办法将格式化的 BigDecimal 数字分配给 BigDecimal?
- c# - 单词。不带对话框窗口另存为 PDF
- angularjs - 单一水疗中心的替代品
- java - 如何在 swt 组合框中显示最大数据数?