首页 文章

修改服务层中的Spring数据页<>类投影响应

提问于
浏览
0

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

@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;
}

2 回答

  • 0

    从1.10开始, Page 已经支持a map method,它专门用于转换其中包含的对象 .

  • 0

    page.getContent()返回一个不可修改的列表 . 最好的方法是使用 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;
    }
    

相关问题