[SPRING] JPA 페이지 가능 객체의 기본 페이지 크기 설정
SPRINGJPA 페이지 가능 객체의 기본 페이지 크기 설정
나는 페이징 가능한 객체를 수용하는 메소드를 가진 PagingandSorting Repository를 가지고있다. 또한 URL을 통해 페이지 할 수있는 객체를 받아들이는 컨트롤러가 있습니다.
사용자가 URL에서 페이지 크기 매개 변수를 지정하면 페이지 가능한 객체에 해당 값을 가져와야합니다. 그가 언급하지 않으면 기본값 인 50을 사용합니다.
하지만 페이징 가능한 개체의 기본값은 20입니다.
모든 제안이 도움이 될 것입니다.
해결법
-
==============================
1.Spring Data PagingAndSortingRepository에 대해 이야기하고 있다면 다음과 같이 Controller 메서드에서 @PageableDefault를 사용하여 기본 페이지 크기를 설정할 수 있습니다.
Spring Data PagingAndSortingRepository에 대해 이야기하고 있다면 다음과 같이 Controller 메서드에서 @PageableDefault를 사용하여 기본 페이지 크기를 설정할 수 있습니다.
public String listClients(@ModelAttribute FilterForm form, Model model, WebRequest request, @PageableDefault(sort = { "surname", "forename", "address.town" }, value = 50) Pageable pageable) { }
또는 XML 설정과 자바 설정 둘다에서 아래와 같이 Spring 설정에서 다음을 사용하여 글로벌 기본값을 설정할 수 있습니다.
최신 버전의 스프링 데이터는 제로 기반의 페이지 색인 생성을 사용하고 이전 버전은 첫 번째 페이지에 1을 사용했습니다. UI 페이징 라이브러리가 1을 첫 페이지로 예상하면 oneIndexedParameters 속성을 true로 설정할 수 있습니다.
XML에서는 다음과 같습니다.
<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="org.springframework.data.web.PageableHandlerMethodArgumentResolver"> <property name="oneIndexedParameters" value="true"/> <property name="fallbackPageable"> <bean class="org.springframework.data.domain.PageRequest"> <constructor-arg name="page" value="1" /> <constructor-arg name="size" value="10" /> </bean> </property> </bean> </mvc:argument-resolvers> </mvc:annotation-driven>
Java Config에서는 다음과 같이 표시됩니다.
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver(); resolver.setOneIndexedParameters(true); resolver.setFallbackPageable(new PageRequest(1, 20)); argumentResolvers.add(resolver); super.addArgumentResolvers(argumentResolvers); } }
-
==============================
2.아래에서 application.yml에서 설정할 수 있습니다.
아래에서 application.yml에서 설정할 수 있습니다.
spring.data.rest.default-page-size: 50
-
==============================
3.Spring Boot 2.X에는 다음과 같은 매개 변수 집합이 있습니다.
Spring Boot 2.X에는 다음과 같은 매개 변수 집합이 있습니다.
# DATA WEB (SpringDataWebProperties) spring.data.web.pageable.default-page-size=20 # Default page size. spring.data.web.pageable.max-page-size=2000 # Maximum page size to be accepted. spring.data.web.pageable.one-indexed-parameters=false # Whether to expose and assume 1-based page number indexes. spring.data.web.pageable.page-parameter=page # Page index parameter name. spring.data.web.pageable.prefix= # General prefix to be prepended to the page number and page size parameters. spring.data.web.pageable.qualifier-delimiter=_ # Delimiter to be used between the qualifier and the actual page number and size properties. spring.data.web.pageable.size-parameter=size # Page size parameter name. spring.data.web.sort.sort-parameter=sort # Sort parameter name.
-
==============================
4.그리고 완성을 위해 다음은 스프링 부트 구성에 대한 예제입니다. WebMvcConfigurerAdapter를 확장하는 @Configuration 클래스에서 기본 페이지 크기를 다음과 같이 50 개 항목으로 설정합니다.
그리고 완성을 위해 다음은 스프링 부트 구성에 대한 예제입니다. WebMvcConfigurerAdapter를 확장하는 @Configuration 클래스에서 기본 페이지 크기를 다음과 같이 50 개 항목으로 설정합니다.
@Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver(); resolver.setFallbackPageable(new PageRequest(0, 50)); argumentResolvers.add(resolver); super.addArgumentResolvers(argumentResolvers); }
-
==============================
5.Pageable 매개 변수 앞에이 주석을 사용할 수 있습니다.
Pageable 매개 변수 앞에이 주석을 사용할 수 있습니다.
@PageableDefault(size = 40) // so your parameter should be like this: @PageableDefault(size = 40) Pageable pageable
-
==============================
6.여전히 잘 문서화되어 있지는 않지만이 기사를 찾는 다른 누구에게나 RepositoryRestConfigurerAdapter에는 모든 스프링 데이터 나머지 설정이 있습니다.
여전히 잘 문서화되어 있지는 않지만이 기사를 찾는 다른 누구에게나 RepositoryRestConfigurerAdapter에는 모든 스프링 데이터 나머지 설정이 있습니다.
@Configuration public static class RestConfig extends RepositoryRestConfigurerAdapter { @Override public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { config.setDefaultPageSize(50); } }
-
==============================
7.제공된 답변은 매우 좋으며 대부분의 경우 도움이됩니다. 그러나 약간 다른 접근 방식을 사용합니다. 모델마다 다른 기본 페이지 크기를 사용할 수 있으며 Spring 또는 시스템 속성을 사용하여 구성 할 수 있습니다.
제공된 답변은 매우 좋으며 대부분의 경우 도움이됩니다. 그러나 약간 다른 접근 방식을 사용합니다. 모델마다 다른 기본 페이지 크기를 사용할 수 있으며 Spring 또는 시스템 속성을 사용하여 구성 할 수 있습니다.
이 접근 방식에는 하나의 근본적인 한계가 있습니다. 즉, 요청과 함께 크기를 허용하지 않습니다. 그것은 정렬 정보를 사용합니다. 따라서 요청 매개 변수를 통해 페이지 당 반환되는 항목 수를 변경할 수있는 기능이 필요한 경우이 솔루션은 적합하지 않습니다.
우선, 요청에 새로운 Pageable 인스턴스베이스를 생성하는 유틸리티 클래스 (또는 컨트롤러에있는 메소드)를 만들었습니다 Pageable 및 구성된 페이지 크기
public static Pageable updatePageable(final Pageable source, final int size) { return new PageRequest(source.getPageNumber(), size, source.getSort()); }
컨트롤러에서 기본 페이지 크기를 유지하는 변수를 추가합니다 (이 경우 기본값은 구성이 제공되지 않으면 20입니다).
@Value("${myapplication.model.items-per-page:20}") private int itemsPerPage;
그런 다음 요청 처리 메서드에서 기본 페이지 크기를 재정의 (즉, 새로운 Pageable 인스턴스를 작성)합니다.
@RequestMapping(method = RequestMethod.GET) public Page<Model> websites(final Pageable pageable) { return repository.findAll(updatePageable(pageable, itemsPerPage)); }
다른 모델 / 컨트롤러에 대해 다른 기본 페이지 크기 변수를 사용합니다.이 변수는 시스템 속성에서도 구성 할 수 있습니다.
from https://stackoverflow.com/questions/27032433/set-default-page-size-for-jpa-pageable-object by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring @RequestBody - 다른 유형의 목록을 포함하지만 (동일한 인터페이스) (0) | 2019.01.17 |
---|---|
[SPRING] Spring AMQP Listener Container의 동시성은 어떻게 구현되고 있는가? (0) | 2019.01.17 |
[SPRING] 스프링 jdbc 템플릿에서 autocommit을 false로 설정하는 방법 (0) | 2019.01.17 |
[SPRING] Spring 4 OSGi 번들은 어디서 구할 수 있습니까? (0) | 2019.01.17 |
[SPRING] Spring + Hibernate 세션 라이프 사이클 (0) | 2019.01.17 |