问题复现:
项目中使用了MapStructPlus
进行数据转换,但没按照文档说明进行使用,导致出现下面的问题!
- 请求地址'/demo/car/list',发生未知异常.
io.github.linpeilie.ConvertException: cannot find converter from Car to CarDto
at io.github.linpeilie.Converter.convert(Converter.java:31)
at io.github.linpeilie.Converter.lambda$convert$0(Converter.java:54)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at io.github.linpeilie.Converter.convert(Converter.java:54)
at org.x.common.core.utils.MapstructUtils.convert(MapstructUtils.java:73)
at org.x.common.mybatis.core.mapper.BaseMapperPlus.selectVoList(BaseMapperPlus.java:174)
at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:166)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
at jdk.proxy2/jdk.proxy2.$Proxy182.selectVoList(Unknown Source)
认真阅读官方文档
笔记
单与单类之间的映射
@AutoMapper(target = CarDto.class)
public class Car {
// ...
}
该例子表示,会生成 Car
转换为 CarDto
的接口 CarToCarDtoMapper 及实现类 CarToCarDtoMapperImpl。在生成的转换代码中,源类型(Car)的所有可读属性将被复制到目标属性类型(CarDto)的相应属性中。
当一个属性与它的目标实体对应物具有相同的名称时,将会被隐式映射。
除此之外,MapStructPlus 会根据当前的默认规则,生成 CarDto 转换为 Car 的接口 CarDtoToCarMapper 及实现类 CarDtoToCarMapperImpl。如果不想生成该转换逻辑的话,可以通过注解的 reverseConvertGenerate
属性来配置。
单与多类之间的映射
@Data
@AutoMappers({
@AutoMapper(target = UserDto.class),
@AutoMapper(target = UserVO.class)
})
public class User {
// fields
}
当想要配置一个类与多个类进行转换时,可以通过 @AutoMappers
来配置,该注解支持配置多个 @AutoMapper
实践
问题已解决