想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。
我有一个A类像:
A {
ClassB b;
String a;
}
现在还有另一类X,例如:
X {
ClassY y;
String a;
}
现在,ClassY和ClassB是一样的,就像:
ClassB/ClassY {
String b;
}
我想将A的实例复制到Y的新对象中。
我遇到过做类似映射的推土机,但那是如果值是原始的。我不知道如何映射它们中的类。尝试用java实现这一点。
我偶然发现了答案https://stackoverflow.com/a/36196948/2733350,但是我在道瑟找不到地图工厂。
来自Apache Commons的BeanUtils将完成这个任务:
复制属性(对象、对象)
https://commons.apache.org/proper/commons-beanutils/apidocs/org/apache/commons/beanutils/BeanUtils.html
可从https://github . com/Johan writers/stack overflow-copy properties获得示例代码
package com.johanw.stackoverflow.copy;
public class ClassB {
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
String b;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ClassB) && !(o instanceof ClassY)) return false;
if (o instanceof ClassB) {
ClassB classB = (ClassB) o;
return b != null ? b.equals(classB.b) : classB.b == null;
} else {
ClassY classY = (ClassY) o;
return b != null ? b.equals(classY.b) : classY.b == null;
}
}
}
package com.johanw.stackoverflow.copy;
public class ClassY {
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
String b;
}
package com.johanw.stackoverflow.copy;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Assert;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
public class TestCopy {
@Test
public void test() {
ClassB b = new ClassB();
b.b = "Hallo";
ClassY y = new ClassY();
try {
Assert.assertFalse(b.equals(y));
BeanUtils.copyProperties(b, y);
Assert.assertTrue(b.equals(y));
} catch (IllegalAccessException e) {
Assert.fail(e.toString());
e.printStackTrace();
} catch (InvocationTargetException e) {
Assert.fail(e.toString());
e.printStackTrace();
}
}
}
我希望这有所帮助。
您可以使用MapStruct。它可以很好地处理复杂的对象。
为了遵循您的示例,我创建了一个映射器,您可以对其进行相应的调整(@Data
来自龙目岛):
@Data
public class A {
private B b;
private String a;
}
@Data
public class B {
private String b;
}
@Data
public class Y {
private String b;
}
现在,您可以定义实际的映射器:
@Mapper
public interface AMapper {
AMapper INSTANCE = Mappers.getMapper(AMapper.class);
@Mapping(source = "b.b", target = "b")
Y aToY(A a);
}
小单元测试:
@Test
public void shouldMapAToY() {
A a = new A();
a.setA("a variable");
final B b = new B();
b.setB("stuff from class b");
a.setB(b);
Y y = AMapper.INSTANCE.aToY(a);
assertThat(y).isNotNull();
assertThat(y.getB()).isEqualTo(b.getB());
}
我正在尝试创建restful API(使用Spring Boot v2.0.0.Release),我希望有一个endpoint,但我希望有两种可能的用途: 首先,这可能吗?其次,有人有代码示例吗? 非常感谢你的帮助
我有2个对象ExpertJpa到ExpertDto的现有映射,需要另一个参数来过滤ExpertJpa。这个映射工作正常,现在我尝试将ExpertJpa列表转换为ExpertDto列表,我添加了第二个参数。 在构建时,我收到错误消息,即List是一个接口,不能是实例…… 错误:(53,18) java:返回类型java.util.List是一个抽象类或接口。提供非抽象/非接口结果类型或工厂方法。
问题内容: 我有一个名为GoogleWeather的类,我想将其转换为另一个CustomWeather类。 有没有可以帮助您转换类的设计模式? 问题答案: 需要做出一个关键决定: 您是否需要转换生成的对象以反映对源对象的将来更改? 如果您不需要这样的功能,那么最简单的方法是将实用程序类与静态方法一起使用,这些静态方法根据源对象的字段创建新对象,如其他答案所述。 另一方面,如果您需要转换后的对象来反
我是Java中Spring框架的新手。并且有一些问题… 我的应用程序使用Spring、Spring seq的安全性、Hibernate框架。 我正在编写一些简单的应用程序。 我有一个页面,可以通过Hibernate将用户添加到db。 用户类: 角色类: 保存在控制器中: 在UserDAO中保存 我在页面上有一个选择块,我可以在其中选择用户角色作为字符串。 所以在保存用户时,我有 所以据我所知,我应
我需要将Java转换为的实例(包括映射内容) 我应该用什么来代替来使此代码可编译?
我有一个(相当复杂的)数据类型: 现在我发现自己需要另一个数据类型…有两个构造函数。一个与的相同;另一个只存储一个。我有什么选择? 虽然这会起作用,但它也允许类似这样的东西,这是没有意义的。