给定如下定义的Source类:
class Source{
private String name;
private int age;
Phone phone
// getters and setters
}
和Phone类定义如下:
class Phone{
private Long id;
private String phoneNumber;
// getters and setters
}
和Target类定义如下:
class Target{
private String name;
private int age;
private Long phone;
// getters and setters
}
我有一个界面:
@Mapper
interface MyMapper{
@Mapping(source = "phone.id", target = "phone")
Target toTarget(Source source);
@Mapping(source = "phone", target = "phone.id")
Source toSource(Target target);
}
当id为null时,如何更改生成的代码以消除Phone对象,
生成代码;
source.setPhone(target t){
if(t==null){
return null;
}
Phone f=new Phone();
if(t.getPhone!=null){
f.setId(t.getPhone();
}
return f;
//in this case mapstruct create an object, even if the source is null
}
答案 0 :(得分:0)
目前MapStruct中无法实现。已经有类似这样的功能请求(请参阅#1166)。
实现此目标的唯一方法是使用@AfterMapping
,如果ID为null
,则将手机设置为null
。
您可以通过以下方式使用@AfterMapping
:
@Mapper
public interface MyMapper {
Source map(Target target);
@AfterMapping
void afterMapping(@MappingTarget Source source) {
if (source.getPhone() != null && source.getPhone().getId() == null) {
source.setPhone(null);
}
}
}