有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案