Ric*_*ler 3 java spring-boot mapstruct
我喜欢使用 mapstruct,但我找不到:是否有一个函数可以将 Pageable 中的 Sort 转换为映射的 dto pageable 到实体 pagable?
链接:
可分页:https ://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Pageable.html
排序:https : //docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Sort.html
故事:
有一个请求:
@GetMapping("find")
public List<DTO> findAll(final Pageable pageable) {
return mapper.map(repository.findAll(pagable));
}
Run Code Online (Sandbox Code Playgroud)
和存储库:
public interface Repository extends JpaRepository<Entity, Long> {
Page<Entity> findAll(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
如果我不想公开实体列名称,那么我会映射该列。例如:
@Mapper
public interface DTOMapper {
@Mappings({
@Mapping(source = "make", target = "manufacturer"),
})
DTO toDto(Entity entity);
}
Run Code Online (Sandbox Code Playgroud)
现在 API/返回值有manufacturer. 的使用manufacturer用于排序请求代替(包括在可分页)make是可能的:sort=manufacturer;asc。
但一定不是sort=make;asc,或者可以JpaRepository处理它吗?
那么有没有一种简单的方法可以将可分页从请求转换为正确的可分页(使用正确的排序)?
谢谢你的答案。
Prz*_*wak 12
好吧 - 回答您的问题“是否有一种简单的方法可以将可分页从请求转换为正确的可分页”。
如果您想使用准备好的映射器从数据库实体中转换检索到的可分页内容,您可以使用以下方法:
repository.findAll(pageable).map(myMapper::toDto)
Run Code Online (Sandbox Code Playgroud)
可分页抽象具有以下map方法:
返回一个新页面,其中包含由给定函数映射的当前页面的内容。
我知道在您的情况下,您还想Sort根据准备好的映射修改来自/到请求的参数(在执行请求时修改参数命名,并在返回响应时修改参数名称,以便 JPA 存储库正确执行它)。
不幸的是,在这种情况下,我担心您必须准备自己的习惯map方法。我建议您可以创建非常相似的方法,但您可以Sort根据@Mappings映射器提供的注释扩展逻辑并修改/创建新方法,该注释将基于 mapstruct 映射定义。它需要某种 Java 反射知识,但使用这种方法您可以创建非常灵活和通用的映射器(如果您有兴趣,最好为 MapStruct 创建扩展)。
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
5590 次 |
| 最近记录: |