如何在GET请求中分页重新分配的数据

时间:2016-12-21 07:45:32

标签: java spring rest

我有以下映射:

@RequestMapping(value = "/client/list", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Client>> listAll(
        @RequestHeader(value = "username", required = true) String username,
        @RequestHeader(value = "api_key", required = false) String apiKey) {

    if (!authenticationService.validate(username, apiKey)){
        throw new UnauthorizedUserException();
    }

    List<Client> clients = clientService.findAll();

    return new ResponseEntity<List<Client>>(clients, HttpStatus.OK);
}

我的问题是可能会返回数千条记录。我如何最好地设计此映射以支持客户端上的分页?

2 个答案:

答案 0 :(得分:1)

您可以创建一个类作为输入对象或请求获取所有参数,然后如果必须使用参数应用分页。请查看以下内容:

public class ClientSearchCriteria {
private String username;
private String apikey;
private Long pageNo;
private Long recordsPerPage;

/*getters and setters*/

}

在您的数据库调用中(如果您使用的是hibernate和条件):使用以下方法 -

  public Criteria applyPaginationCriteria(ClientSearchCriteria searchCriteria){
    Long recordsPerPage = searchCriteria.getRecordsPerPage();
    if (recordsPerPage >= 0L) {
        criteria.setFirstResult((int) (searchCriteria.getPageNo() * recordsPerPage - recordsPerPage));
        criteria.setMaxResults(recordsPerPage.intValue());
    }
     return criteria;
}

或者如果不是hibernate调用,您可以使用sql查询来检索结果(如上面的HQL查询),然后将其传递给您的服务调用。

答案 1 :(得分:0)

您始终可以使用JTable。查看示例here