从不同对象映射到单个字段
Mapping from different objects into single field
一开始我想警告我删除了 getter 和 setter 以使代码简洁。
我想代码会更准确地描述那么多字
//Mapper is obviously as separate class
@Mapper
public interface TestMapper {
@Mapping(source = "x.field1", target="inner.field1")
@Mapping(source = "y.field2", target="inner.field2")
Target map(Source source);
}
class Source {
private X x;
private Y y;
}
class X {
private String field1;
}
class Y {
private String field2;
}
class Target {
private Inner inner;
}
class Inner {
private String field1;
private String field2;
}
public class Main {
public static void main(String[] args) {
Source source = new Source();
final X x = new X();
x.setField1("field1");
Y y = new Y();
y.setField2("field2");
source.setX(x);
source.setY(y);
final TestMapper mapper = Mappers.getMapper(TestMapper.class);
Target target = mapper.map(source);
System.out.println(source.getX().getField1().equals(target.getInner().getField1()));
System.out.println(source.getY().getField2().equals(target.getInner().getField2()));
}
}
这样的代码生成如下实现:
public class TestMapperImpl implements TestMapper {
@Override
public Target map(Source source) {
if ( source == null ) {
return null;
}
Target target = new Target();
target.setInner( xToInner( source.getX() ) );
target.setInner( yToInner( source.getY() ) );
return target;
}
(...)
这显然会导致 Inner 的压倒性值。这不是我所期望的。有没有办法让它工作?或者它是 mapstruct 中的一些错误?
这是 MapStruct 中的一个已知错误,已在 1.3 中修复。1.Final 版本。
相关问题是mapstruct/mapstruct#1828。
如果您升级到 1.3 后仍然遇到同样的问题。1.Final 那么请在 MapStruct 中提出一个新问题 bug tracker
一开始我想警告我删除了 getter 和 setter 以使代码简洁。
我想代码会更准确地描述那么多字
//Mapper is obviously as separate class
@Mapper
public interface TestMapper {
@Mapping(source = "x.field1", target="inner.field1")
@Mapping(source = "y.field2", target="inner.field2")
Target map(Source source);
}
class Source {
private X x;
private Y y;
}
class X {
private String field1;
}
class Y {
private String field2;
}
class Target {
private Inner inner;
}
class Inner {
private String field1;
private String field2;
}
public class Main {
public static void main(String[] args) {
Source source = new Source();
final X x = new X();
x.setField1("field1");
Y y = new Y();
y.setField2("field2");
source.setX(x);
source.setY(y);
final TestMapper mapper = Mappers.getMapper(TestMapper.class);
Target target = mapper.map(source);
System.out.println(source.getX().getField1().equals(target.getInner().getField1()));
System.out.println(source.getY().getField2().equals(target.getInner().getField2()));
}
}
这样的代码生成如下实现:
public class TestMapperImpl implements TestMapper {
@Override
public Target map(Source source) {
if ( source == null ) {
return null;
}
Target target = new Target();
target.setInner( xToInner( source.getX() ) );
target.setInner( yToInner( source.getY() ) );
return target;
}
(...)
这显然会导致 Inner 的压倒性值。这不是我所期望的。有没有办法让它工作?或者它是 mapstruct 中的一些错误?
这是 MapStruct 中的一个已知错误,已在 1.3 中修复。1.Final 版本。
相关问题是mapstruct/mapstruct#1828。
如果您升级到 1.3 后仍然遇到同样的问题。1.Final 那么请在 MapStruct 中提出一个新问题 bug tracker