我有一个PagingandSorting存储库,该存储库具有接受可分页对象的方法。我还有一个控制器,可以通过URL接受可分页的对象。
我的用例是,如果用户在URL中指定页面大小参数,则我必须为可分页对象使用该值。如果他不提及,则采用默认值50。
但是可分页对象现在默认为20。
任何建议都会有所帮助
如果你正在谈论Spring Data PagingAndSortingRepository,则可以通过使用@PageableDefaulton Controller方法来设置默认页面大小,如下所示:
@PageableDefaulton
public String listClients(@ModelAttribute FilterForm form, Model model, WebRequest request, @PageableDefault(sort = { "surname", "forename", "address.town" }, value = 50) Pageable pageable) { }
或者,你可以在Spring配置中使用以下命令配置全局默认值,如下所示在XML和Java配置中。
请注意,较新版本的Spring Data使用基于零的页面索引,而较旧版本的第一页使用1。如果你的UI分页库期望首页为1,则可以将oneIndexedParameters属性设置为true:
oneIndexedParameters
true
public void setOneIndexedParameters(boolean oneIndexedParameters)
配置是否在请求参数中公开并假定基于1的页码索引。默认为false,表示请求中的页数0等于第一页。如果将其设置为true,则请求中的页码1将被视为第一页。
参数:oneIndexedParameters-要设置的oneIndexedParameters
public void setFallbackPageable(Pageable fallbackPageable)
如果在要解析的方法参数上找不到PageableDefault或PageableDefaults(后者仅在旧版模式下受支持),则将Pageable配置为用作回退。如果将其设置为null,请注意,如果在请求中找不到Pageable数据,则控制器方法将被空值处理。请注意,这样做将需要你向bot提供页面和size参数以及请求,因为任何可用参数都没有默认值。
参数:fallbackPageable-用作常规回退的Pageable。
在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); } }