无法使用ModelMapper
将dto类转换为dto类。
NB:我不想使用getter / setter。我只想使用Optional
吸气剂
示例:
class A {
Long id;
public Optional<Long> getId() {
return Optional.ofNullable(id);
}
}
另一堂课:
class B {
Long id;
// getter and setter
}
转换器:
B f(A a) {
new ModelMapper.map(a, B.class);
}
错误:failed to convert java.util.Optional to java.lang.Long.\n\n1 error
答案 0 :(得分:1)
我想,映射器只是通过反射,构建获取器来扫描字段,并且期望与字段类型具有相同的返回类型。
这就是为什么它无法将Long
强制转换为Optional<Long>
的原因。
作为解决方法,您可以使字段Optional<Long>
本身。
或者,甚至更好,就是不要在POJO getter中返回可选值。
答案 1 :(得分:1)
我认为Converter可以为您提供帮助。
Converter<String, String> toUppercase = new AbstractConverter<String, String>() {
protected String convert(String source) {
return source == null ? null : source.toUppercase();
}
};
在这里http://modelmapper.org/user-manual/converters/进行检查,您只需将一个字符串替换为Optional
,将第二个字符串替换为Long
答案 2 :(得分:0)
可选对象:.get()
示例:
@GetMapping("/{id:[0-9]+}")
LanguageDto getLanguageById(@PathVariable Long id) {
Optional<Language> lang = service.findById(id);
if (lang.isPresent()) {
return modelMapper.map(lang.get(), LanguageDto.class);
} else {
throw new EntitySimpleNotFoundException("Language", id);
}
}
-> modelMapper.map(lang.get(), LanguageDto.class)