Как я могу реализовать пейджинговый отдых весной без хранилища - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь создать фиктивный сервис. Я создал конечную точку отдыха.

/OrderLine/lists/_generic?limit=3&_paging=NEXT

на слое сервиса. Я делаю

    List<OrderLineDTO> listPOL = generateMockOrderLinesByCount(Constants.COUNT);

, так как я могу подать заявку? разбиение на страницы в этих фиктивных данных без использования репозитория

Я пытаюсь сначала преобразовать список в страницу, но это не кажется полезным или, может быть, я пытаюсь в неправильном направлении, пожалуйста, предложите.

Page<OrderLineDTO> listToPage(List<OrderLineDTO> list, Pageable pageable) {
        int start = (int) pageable.getOffset();

        int end = (int) ((start + pageable.getPageSize()) > list.size() ? list.size()
                : (start + pageable.getPageSize()));
        Page<OrderLineDTO> page = new PageImpl<OrderLineDTO>(list.subList(start, end), pageable,
                list.size());
        return page;
    }

Мой окончательный ответ json, как будто мне нужно добавить поля на основе предела прохода, а максимальное число будет иметь некоторое значение c, скажем, 100. Таким образом, из 100 полей, что означает listPOL.size () = 100 и мне нужно получить эти 100 на основе данного примера ограничения 10. Это может быть получено до 10 раз ie. 10 * предел = 10 = 100

[
    {
        "_fields": {
            //some data
        }
    },
    {
        "_fields": {
            //some data
        }
    },
    {
        "_count": 3,
        "links": [
            {
                "rel": "self",
                "href": "http://localhost:8080/rest/orderLine/lists/_generic?_fields=_all&_limit=3",

            },
            {
                "rel": "next",
                "href": "http://localhost:8080/rest/orderLine/lists/_generic?_fields=_all&_limit=3&Company=32&orderLine=79",

            },
            {
                "rel": "prev",
                "href": "http://localhost:8080/rest/orderLine/lists/_generic?_fields=_all&_limit=3&Company=82&orderLine=23",

            }
        ]
    }
]

1 Ответ

0 голосов
/ 05 марта 2020

я нашел ответ

Page<OrderLineDTO> toPage(List<OrderLineDTO> list, int pagesize, int pageNo) {

    int totalpages = list.size() / pagesize;
        PageRequest pageable = new PageRequest(pageNo, pagesize);

        int max = pageNo>=totalpages? list.size():pagesize*(pageNo+1);
        int min = pageNo >totalpages? max:pagesize*pageNo;

        logger.info("totalpages{} pagesize {} pageNo {}   list size {} min {}   max {} ...........", totalpages,pagesize, pageNo, list.size(),
                min, max);
        Page<OrderLineDTO> pageResponse = new PageImpl<OrderLineDTO>(list.subList(min, max), pageable,
                list.size());
        return pageResponse;
    }

и вызвал ваш метод из вашего сервиса

Page<OrderLineDTO> page = toPage(listPOL, pagesize), pageno));
...