I am trying to implement pagination as well filter in server side.
These two ways i went through to implement. i am using spring data jpa.
1.Use the JpaSpecificationExecutor and write a Specification
2.Use the QueryDslPredicateExecutor and use QueryDSL to write a predicate.
i started with JpaSpecificationExecutor but found it complex.
Here is my Specification Class:
public class TransmissionSearchSpecification implements Specification {
private TransmissionSearch criteria;
public TransmissionSearchSpecification(TransmissionSearch ts) {
criteria= ts;
}
@Override
public Predicate toPredicate(Root<TransmissionView> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder builder) {
Path<String> thirdParty = root.get(TransmissionView_.thirdPartyName);
final List<Predicate> predicates = new ArrayList<Predicate>();
if(criteria.getThirdPartyName() !=null) {
predicates.add(builder.equal(thirdParty, criteria.getThirdPartyName()));
}
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
}
public class TransmissionController {
private final TransmissionViewService transmissionViewService;
public TransmissionController(TransmissionViewService transmissionViewService) {
this.transmissionViewService = transmissionViewService;
}
@RequestMapping("/transmissions/search")
@GetMapping
public ResponseEntity<Page<TransmissionView>> getTransmissions(TransmissionSearch transmissionSearch, Pageable pageable){
Page<TransmissionView> transmissions = transmissionViewService.findTransmissions(pageable);
if(!CollectionUtils.isEmpty(transmissions.getContent())) {
return new ResponseEntity<>(transmissions, HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}
Is there any other way that can ease the filter and pagination .Please suggest. Thanks in advance