복붙노트

[SPRING] JPA 페이지 가능 객체의 기본 페이지 크기 설정

SPRING

JPA 페이지 가능 객체의 기본 페이지 크기 설정

나는 페이징 가능한 객체를 수용하는 메소드를 가진 PagingandSorting Repository를 가지고있다. 또한 URL을 통해 페이지 할 수있는 객체를 받아들이는 컨트롤러가 있습니다.

사용자가 URL에서 페이지 크기 매개 변수를 지정하면 페이지 가능한 객체에 해당 값을 가져와야합니다. 그가 언급하지 않으면 기본값 인 50을 사용합니다.

하지만 페이징 가능한 개체의 기본값은 20입니다.

모든 제안이 도움이 될 것입니다.

해결법

  1. ==============================

    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. ==============================

    2.아래에서 application.yml에서 설정할 수 있습니다.

    아래에서 application.yml에서 설정할 수 있습니다.

    spring.data.rest.default-page-size: 50
    
  3. ==============================

    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. ==============================

    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. ==============================

    5.Pageable 매개 변수 앞에이 주석을 사용할 수 있습니다.

    Pageable 매개 변수 앞에이 주석을 사용할 수 있습니다.

    @PageableDefault(size = 40)
    
    // so your parameter should be like this:
    @PageableDefault(size = 40) Pageable pageable
    
  6. ==============================

    6.여전히 잘 문서화되어 있지는 않지만이 기사를 찾는 다른 누구에게나 RepositoryRestConfigurerAdapter에는 모든 스프링 데이터 나머지 설정이 있습니다.

    여전히 잘 문서화되어 있지는 않지만이 기사를 찾는 다른 누구에게나 RepositoryRestConfigurerAdapter에는 모든 스프링 데이터 나머지 설정이 있습니다.

    @Configuration
    public static class RestConfig extends RepositoryRestConfigurerAdapter {
    
        @Override
        public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
                config.setDefaultPageSize(50);
        }
    
    }
    
  7. ==============================

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

    다른 모델 / 컨트롤러에 대해 다른 기본 페이지 크기 변수를 사용합니다.이 변수는 시스템 속성에서도 구성 할 수 있습니다.

  8. from https://stackoverflow.com/questions/27032433/set-default-page-size-for-jpa-pageable-object by cc-by-sa and MIT license