我正在尝试使用具有分页功能的微控制器。Micronaut Data有这个春天启发了我们来使用可寻呼类访问存储库并返回一个页面
当您想要显示这个分页数据时,问题就出现了。我无法创建一个调用控制器的分页。这里我有一个简单的控制器:
@Controller
public class PageableController {
private static final Logger LOGGER = LoggerFactory.getLogger(PageableController.class);
@Get(produces = APPLICATION_JSON, value = "/test{?pageable}")
public Page<String> getNames(@Nullable Pageable pageable) {
LOGGER.info("pageable {}", pageable);
if( pageable == null){
return Page.of(Arrays.asList("foo", "bar"), Pageable.UNPAGED, 2);
}else{
return Page.of(Arrays.asList("foo", "bar"), pageable, 2);
}
}
}我希望能用这样的方式来称呼它。但是,当前记录器显示,可分页始终为空:
@MicronautTest
class PageableControllerTest {
@Inject
@Client("/")
private RxHttpClient client;
@Test
void callsWithPageable() {
String uri = "/test?size=20&number=2";
String orders = client.toBlocking().retrieve(HttpRequest.GET(uri));
//TODO, assert orders and pagination
}如果我们能用这样的方法来测试它就更好了:
@Test
void callsWithPageableParsingJson() {
String uri = "/test?size=20&number=2";
//This fails to parse as it can't build pages.
Page<String> pages = client.toBlocking().retrieve(HttpRequest.GET(uri), pageOf(String.class));
assertThat(pages.getSize(), is(2));
assertThat(pages.getContent(), contains("foo", "bar"));
}
// Inspired by Argument.listOf
private static <T> Argument<Page<T>> pageOf(Class<T> type) {
return Argument.of((Class<Page<T>>) ((Class) Page.class), type);
}这个微虫显示正确的分页方法是使用Micronaut数据。
发布于 2019-09-04 09:17:30
通过添加以下依赖项解决了这个问题:
<dependency>
<groupId>io.micronaut.data</groupId>
<artifactId>micronaut-data-runtime</artifactId>
<version>1.0.0.M1</version>
</dependency>我的控制器层可以访问微数据模型,但是这个jar包含重要的类PageableRequestArgumentBinder。只要我是类路径,它就会自动作为一个绑定器注入,而不需要额外的配置。
是的,Free是正确的,现在我可以从路径中删除可分页的参数,并且方法中的参数不需要@Nullable:
@Controller
public class PageableController {
private static final Logger LOGGER = LoggerFactory.getLogger(PageableController.class);
@Get(produces = APPLICATION_JSON, value = "/test")
public Page<String> getNames(Pageable pageable) {
LOGGER.info("pageable {}", pageable);
return Page.of(Arrays.asList("foo", "bar", "baz"), pageable, 3);
}为了调用它,我们新使用了在标准参数名称中定义的DataConfiguration.PageableConfiguration。
如果您想使用不同的参数,可以使用属性来更改它:
micronaut:
data:
pageable:
max-page-size: 500你可以用
@Test
void callsWithPageable() {
String uri = "/test?page=1&size=2";
Page<String> pages = client.toBlocking().retrieve(HttpRequest.GET(uri), pageOf(String.class));
assertThat(pages.getPageNumber(), is(1));
assertThat(pages.getTotalPages(), is(2));
assertThat(pages.getSize(), is(2));
assertThat(pages.getContent(), contains("foo", "bar", "baz"));
}而且,为了使事情更好,客户端可以使用返回pageOf的Argument>方法将结果转换为页面。
https://stackoverflow.com/questions/57726577
复制相似问题