Spring Data MongoDB如何在实体上设置字段?

Spring Data MongoDB如何在实体上设置字段?,mongodb,spring-data,spring-data-mongodb,Mongodb,Spring Data,Spring Data Mongodb,我有一门数学课 public interface UserRepository extends MongoRepository<User, Long> { User findById(Long id); } 调用findBy方法时,返回一个用户对象。我想知道SpringDataMongoDB是如何将DBObject转换为Java对象的。我的印象是SpringDataMongoDB在幕后使用了某种映射器(Jackson?),它会根据类或@field注释中的字段名调用java(实

我有一门数学课

public interface UserRepository extends MongoRepository<User, Long> {

  User findById(Long id);
}
调用findBy方法时,返回一个用户对象。我想知道SpringDataMongoDB是如何将DBObject转换为Java对象的。我的印象是SpringDataMongoDB在幕后使用了某种映射器(Jackson?),它会根据类或
@field
注释中的字段名调用java(实体)类的setters/constructor方法。但令我惊讶的是,设置器从未被调用。只调用默认构造函数

那么字段是如何设置的呢?我问这个问题的原因是,如果调用setter,它将给我一个选项来设置其他字段


感谢您,Spring在其下一层有一个实体转换器。它使用反射来读取字段类型、变量和签名。转换逻辑对于所有数据存储库都是通用的。你可以读到同样的内容


您还可以引入一个自定义转换器,无论是您的转换器还是jackson转换器,例如Spring Data默认为字段访问,因为访问器方法可以包含我们不希望意外触发的附加逻辑。如果这是您真正想要的,您可以通过使用
@AccessType(Type.property)

注释类来切换到属性访问查看类-它具有完成所有这些操作的逻辑。

嗨,感谢您的回复。我查看了链接并尝试实现自己的转换器。但这没用。基本上我需要转换一个日期字段。在mongo中,它存储为字符串。但在我的pojo(实体类)中,我希望将其映射为Date或LocalDateTime。但当我为String编写一个到LocalDateTime的转换器时,Spring尝试将DBObject中的每个字符串字段转换为LocalDateTime。如何仅将特定字段转换为其他类型?谢谢将日期保存为字符串有什么特别的原因吗?嗨,谢谢你的回复。这是我正在读取的某个外部数据库。我无法控制它。:)
@Document(collection = "user")
class User {

  Long id;
  String name;
  Department department;
  …
}