我在一个普通的OSGi包中使用Mapstruct。我添加了一些基本代码:
package com.XXX.XXX.test;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import java.util.Map;
@Mapper
public interface AccountPreferencesMapper {
AccountPreferencesMapper MAPPER = Mappers.getMapper(AccountPreferencesMapper.class);
@Mapping(expression = "java((String) r.get(\"defaultName\"))", target = "name")
MappedAccountPreferences toMappedAccountPreferences(Map<String, Object> r);
}和
package com.XXX.XXX.test;
public class MappedAccountPreferences {
public String name;
}当我构建包时,它将在以下内容中生成实现:
target/generated-sources/annotations/AccountPreferencesMapperImpl.java
问题是,当我打电话给AccountPreferencesMapper.MAPPER时,我无法得到它。它会说它是空,或者我得到:无法初始化类。
我在同一个包中有以下代码:
Map accountPreferencesMap = new HashMap<String, Object>();
accountPreferencesMap.put("defaultName", "User Name");
MappedAccountPreferences dto = AccountPreferencesMapper.MAPPER.toMappedAccountPreferences( accountPreferencesMap );请注意,我必须使用以下方法编译代码:mvn干净安装和mvn内容包:install(我不使用任何编译编辑器)
我尝试在POM中添加mapstruct 8/mapstruct处理器作为单独的依赖项,在其他堆栈溢出mapstruct类似的问题中解释了这一点,但是它不能工作。
谢谢!
发布于 2020-11-10 16:02:39
在AccountPreferencesMapper接口中,不需要使用MAPPER
@Mapper
public interface AccountPreferencesMapper {
@Mapping(expression = "java((String) r.get(\"defaultName\"))", target = "name")
MappedAccountPreferences toMappedAccountPreferences(Map<String, Object> r);
}之后,在您的服务中,您可以像这样使用映射器:
Map accountPreferencesMap = new HashMap<String, Object>();
accountPreferencesMap.put("defaultName", "User Name");
MappedAccountPreferences mappedAccountPreferences = accountPreferencesMapper.toMappedAccountPreferences(accountPreferencesMap);如果使用
@SpringBootTest( class = {AccountPreferencesMapperImpl.class})公共类TestClass{ }
https://stackoverflow.com/questions/59086067
复制相似问题