假设我有一个具有公共字段 x
和 y
的类 A
。假设我有另一个 pojo 类 B
,但它使用 setter 和 getter,所以它有 setX() 和 setY()。
我想使用一些自动方法从A
实例复制到B
并返回。
至少使用默认设置,推土机的
Mapper mapper = new DozerBeanMapper();
B b = mapper.map(a, B.class);
未正确复制字段。
那么,是否有一个简单的配置更改可以让我使用Dozer或其他库来完成上述操作?
对于仍在寻找的人,您可以使用Gson
试试这个。
Gson gson = new Gson();
Type type = new TypeToken<YourPOJOClass>(){}.getType();
String data = gson.toJson(workingPOJO);
coppiedPOJO = gson.fromJson(data, type);
实际上不是一行程序,但这种方法不需要任何lib。
我用这些类来测试它:
private class A {
public int x;
public String y;
@Override
public String toString() {
return "A [x=" + x + ", y=" + y + "]";
}
}
private class B {
private int x;
private String y;
public int getX() {
return x;
}
public void setX(int x) {
System.out.println("setX");
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
System.out.println("setY");
this.y = y;
}
@Override
public String toString() {
return "B [x=" + x + ", y=" + y + "]";
}
}
要获得公共字段,我们可以使用反射,至于setter,最好使用bean utils:
public static <X, Y> void copyPublicFields(X donor, Y recipient) throws Exception {
for (Field field : donor.getClass().getFields()) {
for (PropertyDescriptor descriptor : Introspector.getBeanInfo(recipient.getClass()).getPropertyDescriptors()) {
if (field.getName().equals(descriptor.getName())) {
descriptor.getWriteMethod().invoke(recipient, field.get(donor));
break;
}
}
}
}
测试:
final A a = new A();
a.x = 5;
a.y = "10";
System.out.println(a);
final B b = new B();
copyPublicFields(a, b);
System.out.println(b);
它的输出是:
A [x=5, y=10]
setX
setY
B [x=5, y=10]
我建议你使用:
http://modelmapper.org/
或者看看这个问题:
通过反射将一个类中字段的所有值复制到另一个类中
我会说API(BeanUtils)和ModelMapper都提供了将pojos的值复制到另一个pojos的单行程序。看看@this:
http://modelmapper.org/getting-started/
问题内容: 我在不同的程序包中有几个Pojo,每个POJO包含同一程序包中另一个Pojo的集合。我需要将所有具有相同名称的项目从Package B Pojos复制到Package A中的对象。 极端: 我想递归地将所有项目从类复制到存在且共享相同名称的类。 更新: 伙计们,我知道这是一个愚蠢的问题,但是我需要维护此代码,现在编写代码时,他们必须调用50个getter和setter或使用50个参数调
我有这个问题。但我很难解释,因为我不知道确切的术语。希望有人能理解。我会尽力描述。我觉得这与
问题内容: 所以我有: 是否有一条sql语句将所有内容从id复制到number? 我将要编写一个php scrip进行选择,然后更新每一行。我的SQL知识很基础,但是我敢肯定有一个聪明的方法可以做到这一点: 背景:ID过去一直是应用程序中显示的数字,并且是唯一的。该数字在我要添加的一些新功能中不再是唯一的-因此我需要将其移动到不唯一的字段中,同时保持旧的完整性。 问题答案: 您可以使用更新语句并引
2.如果用户在excel表格中复制,则应易于复制,即使用户试图在记事本中复制,也应以表格格式打印。 3.添加一些元数据到剪贴板,以确定pojo何时我们将再次导入表。 为了将pojo列表转换为表格格式,我使用了jtable,但无法将所有jtable内容导出到剪贴板。 --pojo.java 当我试图将字符串值复制到剪贴板时,它是工作的,但当我试图复制pojo时,它是不工作的。
这可能吗?我想将JSON反序列化到POJO结构中,但除此之外,还要在POJO(或子POJO)中保存原始JSON的副本。例如,假设我有以下结构: 现在我有一套简单的两个POJO: 除了正确设置pojo字段之外,是否还可以使用类的完整JSON设置中的? 虽然我可以用自定义方法重新创建它,但我没有映射的任何额外JSON字段都会丢失,我想保留这些字段以用于异常日志记录(即,我需要上游系统发送的原始JSON
我正在编写一个JSON接口/库,用于Bugzilla的webservice。 这可以使用注释或其他内容吗?还是要为每个这样的实例编写一个自定义反序列化程序? 我试着做了一些研究,发现了一些关于值实例化器或使用构造函数的信息,但使用构造函数不是反bean吗?我发现新特性的文档很少或难以理解。 示例: 我对一个字段使用pojo的原因是,这个用户类是由另一个具有更多字段的用户类扩展的。虽然我可以实现一个