将 DTO 映射到后端实体
Posted
技术标签:
【中文标题】将 DTO 映射到后端实体【英文标题】:map DTO to Backend Entities 【发布时间】:2021-12-31 20:09:23 【问题描述】:我正在开发一个休息应用程序,其中 DB 中的数据加载到实体中,然后对数据进行一些转换,同时填充相应的 DTO,然后返回给消费者。
根据消费者和其他一些参数,应该将不同的数据子集返回给用户,例如,如果用户正在查询他的个人信息,则返回的详细信息级别将与经理查询时不同他的员工的数据等......
我的问题: 是否有任何框架来处理此自定义映射(即基于 xml 的文件,该文件确定应在哪种条件下将哪个 BE 实体中的哪个字段映射到哪个 DTO?而不是在每种情况下制作自定义代码?提前致谢。
我正在使用弹簧休息 + 休眠
【问题讨论】:
【参考方案1】:关于 XML 文件映射,我不知道。但我发现真正有用且非常可定制的是MapStruct。这是一个非常有用的库,文档和示例都非常好。
一个简单的例子:
@Mapper
public interface CarMapper
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
@Mapping(source = "numberOfSeats", target = "seatCount") // Here is one of the functionalities that you wanted...
CarDto carToCarDto(Car car);
还有 IDE 和 Lombok 支持。
【讨论】:
谢谢...但是我需要实现carToCarDto
方法-如果我有多个映射,还有其他方法-...对吗?
不,MapStruct 会为你实现它们,你只需要拥有 getter 和 setter。检查我在答案中链接的示例和网站。它完全符合您的需要以上是关于将 DTO 映射到后端实体的主要内容,如果未能解决你的问题,请参考以下文章
使用 Linq Select 将实体映射到 DTO 的最简洁方法?
我应该将 DTO 映射到客户端和服务器端的域实体/从域实体映射吗?
使用 Automapper,将 DTO 映射回实体框架,包括引用的实体