首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于可分页的微控制器

基于可分页的微控制器
EN

Stack Overflow用户
提问于 2019-08-30 12:15:30
回答 3查看 4.9K关注 0票数 3

我正在尝试使用具有分页功能的微控制器。Micronaut Data有这个春天启发了我们来使用可寻呼类访问存储库并返回一个页面

当您想要显示这个分页数据时,问题就出现了。我无法创建一个调用控制器的分页。这里我有一个简单的控制器:

代码语言:javascript
运行
复制
    @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);
            }
        }
    }

我希望能用这样的方式来称呼它。但是,当前记录器显示,可分页始终为空:

代码语言:javascript
运行
复制
    @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
        }

如果我们能用这样的方法来测试它就更好了:

代码语言:javascript
运行
复制
    @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数据。

EN

Stack Overflow用户

回答已采纳

发布于 2019-09-04 09:17:30

通过添加以下依赖项解决了这个问题:

代码语言:javascript
运行
复制
    <dependency>
       <groupId>io.micronaut.data</groupId>
       <artifactId>micronaut-data-runtime</artifactId>
       <version>1.0.0.M1</version>
    </dependency>

我的控制器层可以访问微数据模型,但是这个jar包含重要的类PageableRequestArgumentBinder。只要我是类路径,它就会自动作为一个绑定器注入,而不需要额外的配置。

是的,Free是正确的,现在我可以从路径中删除可分页的参数,并且方法中的参数不需要@Nullable:

代码语言:javascript
运行
复制
    @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

  • DEFAULT_PAGE_PARAMETER“页面”
  • DEFAULT_SIZE_PARAMETER“尺寸”
  • DEFAULT_SORT_PARAMETER“排序”

如果您想使用不同的参数,可以使用属性来更改它:

代码语言:javascript
运行
复制
micronaut:
  data:
    pageable:
     max-page-size: 500

你可以用

代码语言:javascript
运行
复制
    @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>方法将结果转换为页面。

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57726577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档