2016-11-15 57 views
3

我对java和spring很新颖。春季可选分页

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

我试过的是在服务门面上实现getTickets,并在所有门票的返回列表中执行。但我没有找到一个方法如何检查可分页设置,因为它总是返回默认值(大小= 20,页面= 0)

//控制器

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

也许我这样做完全错了?

回答

3

如果你打造出像这样的控制器的方法,你可以管理你是否希望实现分页通过检查请求参数:

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