java - 在 Spring JPA 中反序列化枚举列表
问题描述
因此,我定义了一个模型,我希望将特定变量作为 ENUM。现在我已经像这样在模型中定义了它。
@Type(
type = "array",
parameters = { @Parameter(name = ListArrayType.SQL_ARRAY_TYPE, value = "member_role") }
)
@Column(name = "access_roles", columnDefinition = "member_role[]")
@Enumerated(EnumType.STRING)
private List<ProjectMemberRole> accessRoles;
枚举是
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum ProjectMemberRole {
LEAD("lead", 4),
COLLABORATOR("collaborator", 3),
PARTICIPANT("participant", 2),
VIEWER("viewer", 1);
private final String value;
private final Integer level;
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ProjectMemberRole forString(String value) {
return stream(ProjectMemberRole.values())
.filter(v -> v.value.equals(value))
.findFirst()
.orElse(null);
}
@Override
@JsonValue
public String toString() {
return this.value;
}
}
甚至。虽然我能够创建,但当我获取时出现此错误
"No enum constant project.model.ProjectMemberRole.collaborator; nested exception is java.lang.IllegalArgumentException: No enum constant project.model.ProjectMemberRole.collaborator"
因此,它似乎被序列化但没有被反序列化。在这种情况下我应该怎么做?
编辑:我正在检查我们是否有一个元素而不是一个数组。如果我们有一个值,那么它与 ENUM Name 一起使用,COLLABORATOR
但如果我们将它作为 List 发送,那么它变成collaborator
所以出于某种原因,它正在为枚举保存 JSON 值。
@Column(name = "access_roles")
@Enumerated(EnumType.STRING)
private ProjectMemberRole[] accessRoles;
@Column(name = "access_role", columnDefinition = "text")
@Enumerated(EnumType.STRING)
private ProjectMemberRole accessRole;
解决方案
在反序列化过程中,枚举通常被认为是大写的。您可以使用杰克逊启用它
objectMapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
当你配置你的 ObjectMapper 时。
推荐阅读
- r - RStudio 中的 SparkR:sparkR.session:JVM 在 10 秒后未准备好
- javascript - 如何在异步函数中处理异步承诺拒绝
- c++ - 有没有办法用 C++ 中的新状态更新枚举变量?
- python - 导入自定义 python 模块
- python - 如何在没有熊猫的情况下将csv转换为多个数组?
- django - update_or_create 前面的两个变量
- ubuntu - Nginx:如何仅将主域与 server_name 匹配
- python - 在 OpenAI Gym 中是否有可能将状态保持为隐藏状态,并且只让一些变量对玩家可见?
- c# - 只有圆底角?
- jquery - 获取数据表中选定行中第一列的值