服务层修改Spring数据页<>class投影响应

Modify Spring data Page<> class projection response in service layer

我正在使用投影,我需要在对象列表中格式化日期变量,但是 Page<> 类型的响应是只读的,所以我不能迭代和修改对象。我该怎么办?

@Override
public Page<OrderDto> findAll(Pageable pageable) {
    return OrderDao.findByIsEnabledTrue(pageable, OrderDto.class);
}

我这样试过:

@Override
public Page<OrderDto> findAll(Pageable pageable) {

    Page<OrderDto> page = orderDao.findByIsEnabledTrue(pageable, OrderDto.class);

    List<OrderDto> orderDtos = page.getContent();

    orderDtos.stream().forEach(it ->{
        it.setFormattedCreatedAt(new SimpleDateFormat("dd-M-yyyy").format(it.getCreatedAt()));
    });

    page.getContent().clear();
    page.getContent().addAll(orderDtos);

    return page;
}

从 1.10 开始,Page 支持 a map method,专门用于让您转换其中包含的对象。

page.getContent() returns 一个不可修改的列表。最好的方法是使用 page:

提供的 map 方法
@Override
public Page<OrderDto> findAll(Pageable pageable) {
  Page<OrderDto> page = orderDao.findByIsEnabledTrue(pageable, OrderDto.class);
  page = page.map(this :: transformOrderDto);
  return page;
}

private OrderDto transformOrderDto(final OrderDto order) {
  order. setFormattedCreatedAt(new SimpleDateFormat("dd-M-yyyy").format(order.getCreatedAt()));
  return order;
}