在Java中使用MongoDB驱动程序POJO

问题描述

编辑:我可以将POJO example与建议的post一起使用,以在控制台中输出用户列表,但没有Object id,如下所示。是导致输出显示JSP页的问题吗?

User [[email protected],fullName=Didi Dee,password=asdfwle]
User [[email protected],fullName=Lucy Liu,password=lalla]

我希望得到如下所示的结果,该结果在浏览器的每个标题显示用户详细信息,

enter image description here

这是在 DAO

中列出用户的新方法
@Override
public List<User> listAll() {
    List<User> userList = new ArrayList<User>();    
    database.getCollection("User",User.class).find().into(userList);
        for (User u : userList) {
        System.out.println(u.toString());
    }

    return userList;
}

我的服务类别

public List<User> listUser() {
    List<User> userList = userDAO.listAll();            
    return userList;
}

控制器

UserService userService = new UserService(request,response);

List<User> userList = userService.listUser();

request.setAttribute("userList",userList); // for jsp to get Attribute

String list_user_page = "user_list.jsp";
Requestdispatcher rd = request.getRequestdispatcher(list_user_page);
rd.forward(request,response);

JSP 显示输出

<c:forEach items="${userList}" var="user" begin="1">
    <tr>            
        <td>${user.userId}</td>
        <td>${user.email}</td>
        <td>${user.fullName}</td>


        <td><a href="edit_user?id=${user.userId}">Edit</a> &nbsp; <a
            href="javascript:void(0);" class="deleteLink" id="${user.userId}">Delete</a>
        </td>
    </tr>
</c:forEach>

解决方法

假设以下内容:

您已包含

CodecRegistry pojoCodecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),fromProviders(PojoCodecProvider.builder().automatic(true).build()));

您的数据库包含以下格式的记录:

> db.User.find().pretty()
{
    "_id" : ObjectId("5f7f92c4d91d2c38583dbfba"),"fullname" : "Stu Dent","email" : "[email protected]","password" : "passWord"
}
{
    "_id" : ObjectId("5f7f9497d91d2c38583dbfbb"),"fullname" : "A. N. Other","email" : "[email protected]","password" : "strongerPassWord_1"
}

用户被定义为像这样的bean:

public class User
{
    private String fullname;
    private String email;
    private String password;
    
    public User()
    {
        // Default bean constructor
    }

    public String getFullname()
    {
        return fullname;
    }

    public void setFullname(String fullname)
    {
        this.fullname = fullname;
    }

    public String getEmail()
    {
        return email;
    }

    public void setEmail(String email)
    {
        this.email = email;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }

    @Override
    public String toString()
    {
        return "User [fullname=" + fullname + ",email=" + email + ",password=" + password + "]";
    }
}

以下代码将数据库的内容读入userList列表:

List<User> userList = new ArrayList<User>();
db.getCollection("User",User.class).find().into(userList);

要输出列表:

for (User u : userList)
{
    System.out.println(u.toString());
}

结果:

User [fullname=Stu Dent,[email protected],password=passWord]
User [fullname=A. N. Other,[email protected],password=strongerPassWord_1]

如果您坚持要遍历各个记录,那么我建议:

FindIterable<Document> userTbl = db.getCollection("User").find();

for (Document doc: userTbl)
{
    User user = new User();
    user.setFullname(doc.getString("fullname"));
    user.setEmail(doc.getString("email"));
    user.setPassword(doc.getString("password"));
    
    System.out.println("User = " + user.toString());
}

哪个会产生:

User = User [fullname=Stu Dent,password=passWord]
User = User [fullname=A. N. Other,password=strongerPassWord_1]
,

之所以无法显示用户列表,是因为我忘记了将数据库连接放置到控制器上,这与以前使用JPA注释的人不同,并在上面添加了JPA层。

response.setContentType("text/html");
MongoDB.getMongoDB();

enter image description here

特别感谢Spuggiehawk给出的建议答案,以便在艰难的调试期间减少编写代码。