MongoDB Java对象变量必须是公共的才能反序列化?
我试图将MongoDB文档反序列化为“用户”对象。我遇到了一些问题,它告诉我需要一个“公共构造函数”,我花了一段时间才发现我必须为用户类提供一个空构造函数。然后将所有变量设置为空,直到我将它们全部公开。下面的代码可以工作,但是有没有一种方法可以避免我的变量需要公开?我更希望它们是私有的,尽管这打破了MongoDB与PojoCodec的反序列化
用户文档
_id:61aad45834362a40eebf73ed
email:"myemail@gmail.com"
name:"MyName"
password:"lol"
points:0
avatar:"https://i.stack.imgur.com/34AD2.jpg"
group:"2fakwn"
用户。java类
public class User {
// How can i make these private??
public String email;
public String name;
public String password;
public int points;
public String avatar;
public String group;
public User() {
}
public User(String email, String name, String password, String avatar) {
this.email = email;
this.name = name;
this.password = password;
points = 0;
this.avatar= avatar;
}
public String getEmail() {
return email;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public int getPoints() {
return points;
}
public void addPoints(int p) {
points += p;
}
public String getAvatar() {
return avatar;
}
public String getGroup() {
return group;
}
搜索查询
// Register codecs
CodecRegistry defaultCodecRegistry = MongoClientSettings.getDefaultCodecRegistry();
CodecRegistry fromProvider = CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build());
CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(defaultCodecRegistry, fromProvider);
// Setup MongoDB client with URI and connect to main database.
ConnectionString connectionString = new ConnectionString(System.getenv("DATABASE"));
MongoClientSettings clientSettings = MongoClientSettings.builder().applyConnectionString(connectionString).codecRegistry(pojoCodecRegistry).build();
// Initialize collections and indexes if they don't exist.
MongoClient mongoClient = MongoClients.create(clientSettings);
MongoDatabase database = mongoClient.getDatabase("ChoreSplitter").withCodecRegistry(pojoCodecRegistry);
users = database.getCollection("users");
users.createIndex(Filters.eq("group", 1));
Bson match = Aggregates.match(Filters.eq("group", code));
Bson sort = Aggregates.sort(Sorts.descending("points"));
List<User> users.aggregate(Arrays.asList(match, sort), User.class).into(new ArrayList<User>());
//I then print out this info
共 (0) 个答案