web-dev-qa-db-ja.com

JPAページング可能オブジェクトのデフォルトのページサイズを設定する

ページング可能なオブジェクトを取得するメソッドを持つPagingandSortingリポジトリがあります。また、URLを介してページング可能なオブジェクトを受け入れるコントローラーもあります。

私の使用例は、ユーザーがURLでページサイズパラメーターを指定した場合、ページング可能なオブジェクトに対してその値を取得する必要があるということです。彼が言及しない場合は、デフォルト値の50を使用します。

ただし、現在、ページング可能オブジェクトのデフォルトは20です。

任意の提案が役立ちます

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とJava configの両方で以下に示すように、Spring構成で以下を使用してグローバルデフォルトを構成できます。

Spring Dataの新しいバージョンではゼロベースのページインデックスが使用され、古いバージョンでは最初のページに1が使用されます。 UIページングライブラリが最初のページとして1を期待している場合、oneIndexedParametersプロパティをtrueに設定できます。

要求パラメーターで1から始まるページ番号インデックスを公開して想定するかどうかを構成します。デフォルトはfalseです。つまり、リクエストのページ番号0は最初のページと同じです。これがtrueに設定されている場合、リクエストのページ番号1は最初のページと見なされます。

パラメーター:oneIndexedParameters-設定するoneIndexedParameters

解決するメソッドパラメーターでPageableDefaultまたはPageableDefaults(レガシーモードでのみサポートされている)が見つからない場合のフォールバックとして使用するPageableを構成します。これをnullに設定する場合、リクエストでページング可能なデータが見つからない場合、コントローラーメソッドがnullを渡されることに注意してください。使用可能なパラメーターにはデフォルトがないため、リクエストを行うにはボットとページにサイズパラメーターを指定する必要があります。

パラメータ:fallbackPageable-一般的なフォールバックとして使用されるページング可能。

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);
    }
}
47
Alan Hay

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.
16
Przemek Nowak

Application.ymlで以下を設定できます

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

そして、完全を期すために、Spring Boot構成の例を次に示します。 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);
}
9
Rori Stumpf

Pageableパラメーターの前にこの注釈を使用できます。

@PageableDefault(size = 40)

// so your parameter should be like this:
@PageableDefault(size = 40) Pageable pageable
5
Hadi hashemi

これはまだ十分に文書化されていませんが、この記事を見つける他の人のために、RepositoryRestConfigurerAdapterにはすべてのspring data rest設定があります。

@Configuration
public static class RestConfig extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
            config.setDefaultPageSize(50);
    }

}
1
jasondt

春のブート2.1.6.RELEASE、以下を使用できます。

@Configuration
public class WebConfig implements WebMvcConfigurer{

    @Value("${paging.default.pageSize}")
    private int size;

    @Value("${paging.default.page}")
    private int page;


    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
        resolver.setFallbackPageable(PageRequest.of(page, size));
        resolvers.add(resolver);
        WebMvcConfigurer.super.addArgumentResolvers(resolvers);
    }
}
0
PAA

提供された回答は非常に優れており、ほとんどの場合に役立ちます。ただし、私はわずかに異なるアプローチを使用します。これにより、モデルごとに異なるデフォルトのページサイズを使用でき、Springまたはシステムプロパティで構成できます。

このアプローチには1つの基本的な制限があることに注意してください。つまり、リクエストに伴うサイズは受け入れられません。ただし、ソート情報を使用します。したがって、リクエストパラメータを介してページごとに返されるアイテムの数を変更する機能が必要な場合、このソリューションは適していません。

まず、リクエスト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));
}

モデル/コントローラーごとに異なるデフォルトのページサイズ変数を使用します。これらの変数は、システムプロパティからでも設定できます。

0
Tom