Spring Data Mongo 无法找到 Enum 的 PersistentEntity

2024-05-04

编辑:我发现了一个相关问题here https://stackoverflow.com/questions/28972455/does-spring-data-mongodb-support-enums,但仅有的两个答案相互矛盾,并且没有足够的信息来解决我的用例。

我正在尝试使用 Spring Data Mongo 从集合中加载记录。这些记录中的字段之一是枚举,定义如下:

@AllArgsConstructor
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Action {
    APPROVED("Approved"),
    SAVED("Saved"),
    CORRECTED("Corrected");

    private String name;

    @JsonCreator
    static Action findValue(@JsonProperty("name") String name) {
        return Arrays.stream(Action.values()).filter(v -> v.name.equals(name)).findFirst().get();
    }
}

这应该定义要根据 JSON 表示进行序列化和反序列化的枚举:{"name": "Saved"}例如。

Jackson 似乎工作得很好,因为我向它发出了一个 API 调用并告诉它期待一个Action类型,并且它读取枚举没有任何问题。

public void save(@RequestBody @Valid Action action) {
    System.out.println(action.getName());
} // successfully prints the name of whatever Action I give

但是,当我尝试使用 Spring Data Mongo 读取带有 Action 字段的对象时,我得到以下信息:

Expected to read Document Document{{name=Corrected}} into type class package.structure.for.some.proprietary.stuff.constants.Action but didn't find a PersistentEntity for the latter!

所以我认为 Spring Data Mongo 无论出于何种原因都无法弄清楚这些枚举。但我不确定如何帮助它将其注册为持久实体。我的 Spring Boot 应用程序的主类位于包中package.structure.for.some.proprietary.stuff并注释如下:

@ComponentScan("package.structure")
@EnableTransactionManagement
@EnableAutoConfiguration
@SpringBootApplication

我想要读取的对象是由这个 POJO 定义的:

import java.util.Date;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.Data;
import lombok.NonNull;

import package.structure.for.some.proprietary.stuff.constants.Action;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "timeStamp",
    "action",
})
@Data
@Document(collection = "sample_coll")
public class Sample {
    @Id
    @JsonIgnore
    private String id = null;

    @JsonProperty("timeStamp")
    @NonNull
    private Date timeStamp;
    @JsonProperty("action")
    @NonNull
    private Action action;
}

并使用 MongoRepository 从集合中查询:

public interface SampleRepository extends MongoRepository<Sample, String> {

}

using SampleRepository.findAll();

所以我的大问题是,如何让 Spring Data Mongodb 将此枚举 Action 识别为持久实体?


尝试@Enumerated

@Enumerated
@JsonProperty("action")
@NonNull
private Action action;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data Mongo 无法找到 Enum 的 PersistentEntity 的相关文章

随机推荐

  • 按索引从下拉列表中选择第一项不起作用。未绑定方法 select_by_index

    我正在尝试单击下拉列表中的第一项 我想使用它的索引值 因为该值每次都可能不同 对于这个特定的测试 我只需要选择下拉列表中的第一项 我尝试过 Select select by index 1 我收到错误 Traceback most rece
  • 您可以控制借用结构体还是借用字段吗?

    我正在开发一个涉及以下结构的程序 struct App data Vec
  • openGL转png

    我正在尝试将包含大量纹理 没有移动 的 openGL 编辑 我画的卡片 thx unwind 转换为一个 PNG 文件 我可以在框架的另一部分中使用该文件我正在与 有 C 库可以做到这一点吗 thanks 如果您的意思只是 获取由 Open
  • 用于编译/反编译二进制数据文件的通用实用程序或库?

    我有各种二进制文件格式 我需要将其转储为某种文本格式 编辑然后重新编译 可能是二进制格式的稍微不同的版本 当然 我可以用 C C 编写一堆实用程序代码来完成这种事情 并且可能利用一个库来处理文本方面的事情 XML 或 JSON 或其他 但这
  • mysql 查询中的 golang 切片,带有 where in 子句

    我正在运行以下查询 但只获取第一个 id 值 select from table where table id in 1 2 3 4 5 6 7 9 11 13 14 15 17 and table deleted at is null 我
  • AWS Api Gateway:缺少身份验证令牌

    所以我有一个链接到 lambda 函数的 api 网关的自定义域名设置 如果我这样做的话我就可以正常工作https api domain com something https api domain com something行为符合预期
  • Http Auth 不适用于 PHP

    我使用 Laravel Lumen Shield 扩展进行 Http 身份验证 但是在我的本地计算机上一切都很完美 我只在我们的服务器上遇到了问题 问题是在我提交正确的登录数据后 登录屏幕再次出现 我尝试了不同的登录数据 不同的浏览器 登录
  • 用于列出用户和组的 Python 脚本

    我正在尝试编写一个脚本 在自己的行上输出每个用户及其组 如下所示 user1 group1 user2 group1 user3 group2 user10 group6 etc 我正在为此用 python 编写一个脚本 但想知道如何做到这
  • 在Python中解析制表符分隔的文件

    我正在尝试在 Python 中解析一个制表符分隔的文件 其中与行开头分开的 k 个制表符的数字应该放入第 k 个数组中 除了逐行读取并执行简单解决方案将执行的所有明显处理之外 是否有内置函数可以执行此操作 或者有更好的方法 您可以使用the
  • 动态分配对象数组

    我有一个包含动态分配数组的类 例如 class A int myArray A myArray 0 A int size myArray new int size A Note that as per MikeB s helpful sty
  • Python:安装 numpy 时出现损坏的工具链错误

    我正在使用 Python 2 7 3 并尝试在 Windows 计算机上安装 numpy 包 但收到运行时错误 提示 工具链损坏 无法链接到简单的 C 程序 我读了解决方案here https stackoverflow com quest
  • 如何查找组中第一个非空值? (使用dataset api进行二次排序)

    我正在研究一个代表事件流的数据集 例如从网站跟踪事件时触发 所有事件都有一个时间戳 我们经常遇到的一个用例是尝试查找给定字段的第一个非空值 例如 类似的东西最能让我们到达那里 val eventsDf spark read json jso
  • 在 C# 中追加到空字符串是如何工作的?

    我很惊讶地看到一个字符串被初始化为 null 然后在生产环境中附加一些内容的示例 只是闻起来不对劲 我确信它会抛出空对象异常 但这个大大简化的示例也有效 string sample null sample test sample equal
  • 迁移范围的独特性

    我一直在尝试找到一种方法来实现这一目标 但我找不到任何尝试 即使如此 我想也许我的方法是完全错误的 也就是说 我应该做什么移民如果我希望两个字段的组合是唯一的 请注意 我不希望它们成为索引 而只是数据库字段 例如 对于下面的迁移 我可以单独
  • 如何在vba中向形状添加点或节点?

    I am trying to add points or nodes to a shape so instead of having 4 points I can have more 这是我添加形状的代码 Set shap2 w Shape
  • SQL错误:1054,SQLState:42S22“字段列表”中的未知列错误Java Spring Boot Mysql错误

    基本上我正在尝试制作一个简单的促销页面 我收到的错误是 SQL 错误 1054 SQLState 42S22 错误是 字段列表 中的未知列 promotion0 promo type id 这是模型类 package promotions
  • 单击片段中的按钮不起作用

    我在片段中有一个按钮 对于该按钮 我重写了 onClick 方法 但它不起作用 单击按钮时 我也有一个 Taost 和一个日志 public class DataShown extends Fragment implements OnCli
  • 是否有理由使用 Scala 的 StringLike.replaceAllLiterally 而不是 Java 的 String.replace?

    Scala 的 StringLike 有该方法replaceAllLiterally literal String replacement String String https github com scala scala blob 56
  • ListenableFuture 到 scala Future

    我正在围绕 java 库编写一个小型 scala 包装器 java 库有一个对象 QueryExecutor 公开了 2 个方法 执行 查询 结果 asyncExecute 查询 ListenableFuture 结果 在这种情况下 Lis
  • Spring Data Mongo 无法找到 Enum 的 PersistentEntity

    编辑 我发现了一个相关问题here https stackoverflow com questions 28972455 does spring data mongodb support enums 但仅有的两个答案相互矛盾 并且没有足够的