Java MapStruct:将目标字段类型用作对象时出错
当我试图让MapStruct将类型转换为对象时,它并没有很好地工作 目标类Java MapStruct:将目标字段类型用作对象时出错,java,mapstruct,Java,Mapstruct,当我试图让MapStruct将类型转换为对象时,它并没有很好地工作 目标类 public static class Filterable implements Name,Disassemble,Note{ String name; String disassemble; Object note; // <-- Object type ... getter setter } 公共静态类Filterable实现名称、反汇编、注释{ 字符串名; 拆线; 对象说
public static class Filterable implements Name,Disassemble,Note{
String name;
String disassemble;
Object note; // <-- Object type
... getter setter
}
公共静态类Filterable实现名称、反汇编、注释{
字符串名;
拆线;
对象说明;//MapStruct尝试查找从源类映射到目标类的方法:对象映射(字符串源)
只要目标类是对象
,用@映射
注释的方法本身就有合适的方法签名:Filterable-toUiFilterableOption(String s)
。因为Filterable
就像Java中的任何其他类一样是对象
。方法参数也是字符串
要解决此问题,请在@Mapping
中使用qualifiedByName
,并添加一个带有@Named
注释的映射方法:
@Mapper
public abstract class TestMapper {
public static final TestMapper TEST_MAPPER = Mappers.getMapper(TestMapper.class);
@Mapping(source = "s", target = "name")
@Mapping(source = "s", target = "note", qualifiedByName = "toNote")
@Mapping(source = "s", target = "disassemble", qualifiedByName = "toDisassemble")
public abstract Filterable toUiFilterableOption(String s);
@Named("toNote")
protected Object toNote(String s) {
return s.toUpperCase(); //just as an example
}
//...
}
生成的代码如下所示:
public class TestMapperImpl extends TestMapper {
@Override
public Filterable toUiFilterableOption(String s) {
if (s == null) {
return null;
}
Filterable filterable = new Filterable();
filterable.setName(s);
filterable.setNote(toNote(s));
filterable.setDisassemble(toDisassemble(s));
return filterable;
}
}
谢谢!所以当我为可重用性而将通用映射器@Named(“toObject”)公共对象转换为对象(T source){return source}
,我得到了一个错误,因为它是wild->wild
映射器。
@Mapper
public abstract class TestMapper {
public static final TestMapper TEST_MAPPER = Mappers.getMapper(TestMapper.class);
@Mapping(source = "s", target = "name")
@Mapping(source = "s", target = "note", qualifiedByName = "toNote")
@Mapping(source = "s", target = "disassemble", qualifiedByName = "toDisassemble")
public abstract Filterable toUiFilterableOption(String s);
@Named("toNote")
protected Object toNote(String s) {
return s.toUpperCase(); //just as an example
}
//...
}
public class TestMapperImpl extends TestMapper {
@Override
public Filterable toUiFilterableOption(String s) {
if (s == null) {
return null;
}
Filterable filterable = new Filterable();
filterable.setName(s);
filterable.setNote(toNote(s));
filterable.setDisassemble(toDisassemble(s));
return filterable;
}
}