【问题标题】:Desrialize Enum List in Spring JPA在 Spring JPA 中反序列化枚举列表
【发布时间】: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


【解决方案1】:

在反序列化过程中,枚举通常被认为是大写的。您可以使用为 Jackson 启用它

objectMapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);

当您配置 ObjectMapper 时。

【讨论】:

  • 如果我们只有一个值,那么它与 ENUM Name COLLABORATOR 一起使用,但如果我们将其作为 List 发送,则它变为 collaborator
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2015-07-26
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多