2016-12-21 2 views
0

У меня есть следующее отображение:Как страница rerturned данных в запросе GET

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

Моя проблема заключается в том, что многие тысячи записей могут быть возвращены. Как мне лучше всего настроить это сопоставление для поддержки пейджинга на клиенте?

+1

Либо вы создаете запрос так, чтобы он запрашивал только запись X, начиная с позиции Y, а затем клиент делал несколько вызовов или выполнял пейджинг на стороне клиента, используя Javascript. – RealSkeptic

+0

Я бы посмотрел на Spring Data, поскольку он поддерживает простую разбивку на страницы на уровне базы данных и обработку запросов страницы. – woemler

ответ

1

Вы можете создать класс как ваш входной объект или запрос, который принимает все параметры, а затем, если вам нужно применить разбиение на страницы с помощью параметров. Пожалуйста, проверьте ниже:

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

/*getters and setters*/ 

} 

И в вас вызове базы данных (если вы используете спящий режим и критерии): используйте следующий метод -

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; 
} 

или если он не является спящим режим вызова, вы можете использовать SQL запрос для получения результатов (как и выше HQL-запроса), а затем передать ему ваш служебный вызов.

Смежные вопросы