【发布时间】:2021-08-06 06:11:41
【问题描述】:
所以,我定义了一个模型,我希望将特定变量作为 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;
【问题讨论】:
-
您的数据库中当前存在哪些值?
-
你应该序列化 COLLABORATOR 而不是 DB 中的值
-
collaborator存在于数据库中。我认为它应该推动协作者?不在 List 中的枚举可以正常工作。
标签: java spring enums spring-data-jpa