java - 可选的 Spring 分页

标签 java spring spring-boot spring-data

我是 java 和 spring 的新手。

我想要实现的是带有分页和排序的 api 端点 /tickets。我做到了并且有效。但我还想做的是,如果查询参数中未指定 sizepage,则返回所有票证的普通列表,因此在 FE 中我可以使用该列表在选择框中。

我尝试做的是在服务外观上实现 getTickets 并返回所有票证列表。但是我没有找到一种方法来检查是否设置了 Pageable,因为它总是返回默认值 (size=20, page=0)

// Controller

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Page<TicketListItemResponseModel>> getTickets(Pageable pageable) {
    logger.info("> getTickets");
    Page<TicketListItemResponseModel> tickets = ticketServiceFacade.getTickets(pageable);
    logger.info("< getTickets");
    return new ResponseEntity<>(tickets, HttpStatus.OK);
}

//TicketServiceFacade

public Page<TicketListItemResponseModel> getTickets(Pageable pageable) {
    Page<Ticket> tickets = ticketService.findAll(pageable);
    return tickets.map(new ConverterFromPagesToListItem());
}

public List<TicketListItemResponseModel> getTickets() {
    List<Ticket> tickets = ticketService.findAll();
    return tickets.stream()
            .map(t -> modelMapper.map(t, TicketListItemResponseModel.class))
            .collect(Collectors.toList());
}

也许我完全错了?

最佳答案

如果你像这样构建你的 Controller 方法,你可以通过检查请求参数来管理是否要实现分页:

@Override
public ResponseEntity<Page<TicketListItemResponseModel>> getTickets(
        @RequestParam(value = "page", defaultValue = "0", required = false) int page,
        @RequestParam(value = "count", defaultValue = "10", required = false) int size,
        @RequestParam(value = "order", defaultValue = "ASC", required = false) Sort.Direction direction,
        @RequestParam(value = "sort", defaultValue = "name", required = false) String sortProperty) {
    // here you would check your request params and decide whether or not to do paging and then return what you need to return
}

如果您需要构建一个 PageRequest 以传递到您的服务方法中,您可以像这样手动执行此操作:

new PageRequest(page, size, new Sort(direction, sortProperty));

关于java - 可选的 Spring 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40619945/

相关文章:

java - @ControllerAdvice 不返回 json 响应

java - 如何更改 Spring STS 仪表板中的语言

java - 从 <hostname>/<ip> 调用到 <hostname> :9000 failed on connection exception: java.net.ConnectException:连接被拒绝

java - 如何从Function接口(interface)返回Consumer

java - 无法将名称 [org.hibernate.dialect.HSQDialect] 解析为策略 [org.hibernate.dialect.Dialect]

spring - org.springframework.web.jsf.el.SpringBeanFacesELResolver 类必须扩展 javax.el.E​​LResolver 类型

java - Java中的数据结构,支持快速搜索和删除数组中的重复项

java - Java Spring Data 中的 MongoDB $graphlookup

java - Spring JDBC : Auto generated id is not returned even though the row is inserted in table

java - 如何在 spring-data Elasticsearch 中构建嵌套对象的搜索查询?