java - 使用默认编解码器注册表到 POJO 的 MongoDb 文档给出“空”值
问题描述
我正在尝试使用 MongoDb 3.7 中可用的编解码器注册表将 Bson 文档映射到 POJO,但它给了我空值。如果我只是打印出 Bson 文档,效果很好。
运行方法
public void run(MlsMongoConfiguration configuration, Environment environment) throws Exception {
// Create a CodecRegistry containing the PojoCodecProvider instance.
CodecRegistry pojoCodecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoClientOptions.Builder clientOptions = new MongoClientOptions.Builder();
MongoClient mongoClient = new MongoClient(new ServerAddress(configuration.mongohost, configuration.mongoport), clientOptions.build());
MongoManaged mongoManaged = new MongoManaged(mongoClient);
environment.lifecycle().manage(mongoManaged);
MongoDatabase db = mongoClient.getDatabase(configuration.mongodb);
MongoCollection<MlsListing> collection = db.getCollection("mlsdata", MlsListing.class).withCodecRegistry(pojoCodecRegistry);
MongoCollection<Person> people_collection = db.getCollection("people", Person.class).withCodecRegistry(pojoCodecRegistry);
// make a document and insert it
//Person ada = new Person("Ada Byron", 20, new Address("St James Square", "London", "W1"));
//people_collection.insertOne(ada);
MlsListing somelisting = collection.find().first();
Person somebody = people_collection.find().first();
System.out.println("=====================================================================");
System.out.println(somelisting);
System.out.println(collection.getNamespace());
System.out.println(somebody);
System.out.println("=====================================================================");
environment.jersey().register(new MlsMongoResource(collection));
}
MlsListing POJO
import org.bson.types.ObjectId;
import java.util.Date;
public final class MlsListing {
public MlsListing(ObjectId _id, String SOURCE) {
this._id = _id;
this.SOURCE = SOURCE;
}
public ObjectId get_id() {
return _id;
}
public void set_id(ObjectId _id) {
this._id = _id;
}
public String getSOURCE() {
return SOURCE;
}
public void setSOURCE(String SOURCE) {
this.SOURCE = SOURCE;
}
private ObjectId _id;
private String SOURCE;
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("MlsData{");
sb.append("id='").append(_id).append('\'');
sb.append(", source='").append(SOURCE).append('\'');
//sb.append(", listing_num='").append(LISTING_NUM).append('\'');
sb.append('}');
return sb.toString();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MlsListing that = (MlsListing) o;
if (_id != null ? !_id.equals(that._id) : that._id != null) return false;
return true;
}
@Override
public int hashCode() {
int result = _id != null ? _id.hashCode() : 0;
result = 31 * result + (SOURCE != null ? SOURCE.hashCode() : 0);
//result = 31 * result + (LISTING_NUM != null ? LISTING_NUM.hashCode() : 0);
return result;
}
}
输出
=====================================================================
MlsData{id='null', source='null'}
mlsdb.mlsdata
Person{id='5b2942b7dccb096b526504d6', name='Ada Byron', age=20, address=Address{street='St James Square', city='London', zip='W1'}}
=====================================================================
people collection 和 mlsdata Collection 在同一个 Database 中,我能够成功打印 People Collection 中的元素。
有什么我想念的吗?任何帮助表示赞赏,谢谢。
解决方案
推荐阅读
- mongodb - 我想根据 Mongo DB 中的匹配条件(ID)将集合(发布)中的几个字段添加到另一个集合(故事)中
- python - 如何确保 Celery 任务在 Pytest 中排队?
- reactjs - 在反应组件中添加多个验证
- python - 如果函数名包含特定字符串,如何在自身内部循环函数并执行其中一些函数
- arrays - 从字典数组中删除重复的字典
- linux - 运行命令,然后通过 SQLCMD 添加结果
- php - 网站在移动设备上完美显示,但谷歌表示其内容比屏幕更宽
- android - 如何以编程方式在通话后关闭免提电话,Android?
- .net - 我不能再调试我的 dotnet 项目了。发生无法加载源错误
- c++ - 没有合适的用户定义转换与重载的构造函数和继承