I am using spring boot with JPA in my project. I have a service class which calls a repository method that returns Page<List<TestDTO>>
@Query("SOME QUERY")
Page<List<TestDTO>> findAllValues(@Param("itemNo") String itemNo,
PageRequest pageRequest);
I want to modify some of the properties of the above Page response after the response is returned by the repository by retaining the Page information.
I have done in the following manner:
Page < List < TestDTO >> resultsPage = repository.findAllValues("itemOne", PageRequest.of(offset, pageSize, Sort.by(direction, field))
resultsPage = resultsPage.map(this::transformTestDTOs);
private List < TestDTO > transformTestDTOs(final List < TestDTO > testDTOList) {
testDTOList.forEach(testDTO -> {
testDTO.setItemName("New Name");
});
return testDTOList;
But I am getting the following exception:
.b.m.d.i.a.r.c.e.GlobalExceptionHandler[0;39m [2m:[0;39m Exception occured while processing the request java.lang.ClassCastException: class com.bosch.ma.dxt.in.apna.reports.response.dto.TTransCustomerStatementDTO cannot be cast to class java.util.List (com.bosch.ma.dxt.in.apna.reports.response.dto.TTransCustomerStatementDTO is in unnamed module of loader 'app'; java.util.List is in module java.base of loader 'bootstrap')
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$Itr.forEachRemaining(ArrayList.java:1003)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at org.springframework.data.domain.Chunk.getConvertedContent(Chunk.java:131)
at org.springframework.data.domain.PageImpl.map(PageImpl.java:86)
My target is to modify the response List contents by retaining the Page
information.
I have followed the following thread, but no use.
Modify Spring data Page<> class projection response in service layer
JPA
does not support Page<List<TestDTO>>
. The query should return Page<TestDTO>
instead.
1 ) Modify Repository method shown below
@Query("SOME QUERY")
Page<TestDTO> findAllValues(@Param("itemNo") String itemNo, PageRequest pageRequest);
2 ) Modify Service Method
Page<TestDTO> resultsPage = repository.findAllValues("itemOne", PageRequest.of(offset, pageSize, Sort.by(direction, field)));
resultsPage = resultsPage.map(this::transformTestDTO);
private TestDTO transformTestDTO(final TestDTO testDTO) {
testDTO.setItemName("New Name");
return testDTO;
}