我在我的其他应用程序中使用ModelMapper。
我必须将List转换为List。
这是我的代码:
Converter<List<UserRole>,List<String>> listConverter = new Converter<List<UserRole>, List<String>>() {
public List<String> convert(MappingContext<List<UserRole>, List<String>> context) {
List<String> target = new ArrayList<String>();
List<UserRole> userRoles = context.getSource();
for (UserRole userRole : userRoles) {
target.add(userRole.getRole().getName());
}
return target;
}
};
PropertyMap<User, UserDTO> propertiesForConvertToDto = new PropertyMap<User, UserDTO>() {
protected void configure() {
using(listConverter).map(source.getUserRoles()).setRoles(null);
}
};
当我正在运行应用时,我收到此错误:
HTTP Status 500 - Request processing failed; nested exception is org.modelmapper.MappingException: ModelMapper mapping errors:
type Exception report
message Request processing failed; nested exception is org.modelmapper.MappingException: ModelMapper mapping errors:
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.modelmapper.MappingException: ModelMapper mapping errors:
1) Failed to instantiate instance of destination java.util.List. Ensure that java.util.List has a non-private no-argument constructor.
Caused by: java.lang.NoSuchMethodException: java.util.List.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getDeclaredConstructor(Class.java:2178)
at org.modelmapper.internal.MappingEngineImpl.instantiate(MappingEngineImpl.java:366)
at org.modelmapper.internal.MappingEngineImpl.createDestination(MappingEngineImpl.java:382)
你能帮帮我吗?我试着解决这个问题五个小时。当我调试时,我知道转换器正常工作。我可能没有正确地称为转换器吗?
答案 0 :(得分:3)
在映射之前,请使用以下代码段执行ModelMapper。
import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Component;
@Component
public class ModelMapperUtil extends ModelMapper{
public ModelMapperUtil() {
this.getConfiguration().setFieldMatchingEnabled(true).setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE);
}
}
现在尝试映射对象值
//implicit maaping
UserDTO dto = mapper.map(userVO, UserDTO.class);
不要忘记添加jar文件 https://mvnrepository.com/artifact/org.modelmapper/modelmapper/0.7.5
答案 1 :(得分:2)
请确保您已定义ModelMapper bean
//Define ModelMapper class in your configuration
@Bean
public ModelMapper modelMapper(){
ModelMapper modelMapper = new ModelMapper();
modelMapper.addMappings(propertiesForConvertToDto);
return modelMapper;
}
答案 2 :(得分:0)
您尝试映射到目标类型列表。尝试改为列出具体的列表实现,例如数组列表。如您所见,问题在于模型映射器无法实例化列表。如果使用具体类型应解决。 另一个尝试是,您使用实例化适当类型的提供程序。 此致。