Изменить ответ проекции класса Spring Data Page <> в слое обслуживания - PullRequest
0 голосов
/ 10 декабря 2018

Я использую проекцию, и мне нужно отформатировать переменную даты в списке объектов, но ответ типа 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;
}

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

page.getContent () возвращает неизменяемый список.Наилучшим подходом является использование метода карты, предоставленного page:

@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;
}
0 голосов
/ 12 августа 2019

Вы можете создать новый список, если хотите изменить эту коллекцию

List<T> list = new ArrayList<>(page.getcontent);
0 голосов
/ 10 декабря 2018

Начиная с 1.10, Page поддерживает метод map , который специально предназначен для преобразования объектов, содержащихся в нем.

...