我正在使用mongo开发JAVA Web服务,为了实现mongo java驱动程序POJO api(如Morphia),我建立了我的POJO,如下所示:
public class User {
public static final String USER_NAME = "userName";
private String userName;
public User() {
}
// getter && setter //
}
USER_NAME = "userName"
是将来用作提交名称的参考。我想要实现的是我可以使用简单的if
来检查接收的数据是否等于字段名称。例如:
User user = new User();
String receivedData = httpRequest.getParameter(User.USER_NAME);
if (receivedData == null) {
return null;
} else {
user.setUserName(receivedData);
userCollection.insertOne(user);
// userCollection is MongoCollection<User>
return Gson().toJson(user);
}
我正在寻找一个可以自动生成其中一个声明(USER_NAME = "userName"
和private String userName
)的eclipse函数或插件,并确保代码的一致性。
当然,如果对更好的做法有任何建议,那将是值得赞赏的。
修改
Stephan的反射方法为代码提供了极大的灵活性。但是,与我原来的简化示例相比,实际情况可能更复杂。例如,一个httpRequest具有许多不同的参数,这些参数存储在不同的(n)POJO中,并且每个POJO具有许多不同的(n)字段。在这种情况下,我们将执行n * n循环以获取字段值。
答案 0 :(得分:1)
如果要对POJO的所有字段执行相同操作,请考虑迭代User.class.getFields()
的结果。对于每个Field
获取名称(f.getName()
),使用名称检索值并将其设置为字段(f.set(object,value)
)。使用这种方法,不需要像USER_NAME
那样的常量。
编辑1 :如果性能是一个问题,您当然可以一劳永逸地将所有这些字段收集到一些集合中,但是瓶颈仍然是必须尝试{{1每个可能的字段。反思方法没有什么特别的。
编辑2 :在“更好”的语言中,可以使用类型检查语法来检索httpRequest.getParameter()
实例,例如,imag(而不是Java):
Field
这个答案基本上表明生成冗余常量并不是绝对必要的,因为一直将名称与字段连接的东西已经存在,它是Field f = User::userName;
。