将 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 映射到后端实体的主要内容,如果未能解决你的问题,请参考以下文章

将验证属性从域实体映射到 DTO

使用 Linq Select 将实体映射到 DTO 的最简洁方法?

我应该将 DTO 映射到客户端和服务器端的域实体/从域实体映射吗?

使用 Automapper,将 DTO 映射回实体框架,包括引用的实体

将 IQueryable where 子句从 DTO 映射到实体

如何将DTO映射到多个实体?