ページング可能なオブジェクトを取得するメソッドを持つ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);
}
}
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.
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);
}
Pageableパラメーターの前にこの注釈を使用できます。
@PageableDefault(size = 40)
// so your parameter should be like this:
@PageableDefault(size = 40) Pageable pageable
これはまだ十分に文書化されていませんが、この記事を見つける他の人のために、RepositoryRestConfigurerAdapterにはすべてのspring data rest設定があります。
@Configuration
public static class RestConfig extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.setDefaultPageSize(50);
}
}
春のブート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);
}
}
提供された回答は非常に優れており、ほとんどの場合に役立ちます。ただし、私はわずかに異なるアプローチを使用します。これにより、モデルごとに異なるデフォルトのページサイズを使用でき、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));
}
モデル/コントローラーごとに異なるデフォルトのページサイズ変数を使用します。これらの変数は、システムプロパティからでも設定できます。