Как вернуть ответ json в виде фрагментов в ответе веб-службы? - PullRequest
2 голосов
/ 26 мая 2020
• 1000 ), это потребляет много памяти.

Есть ли способ записать «частичные» json результаты в поток ответов?

1 Ответ

1 голос
/ 26 мая 2020

Вы можете использовать Pagination для создания фрагмента данных для клиента по запросу.

Вы можете сделать что-то вроде этого:

Репозиторий:

@Repository
    public interface SomethingRepository extends PagingAndSortingRepository<Something, Long> {
        Page<Something> findByMember_Id(Long memberId, Pageable pageable);
    }

SomethingPageDto:

public class SomethingPageDto{

    @JsonProperty("favourite_list")
    private List<SomethingDto> somethings= new ArrayList<>();

    @JsonProperty("total_pages")
    private int totalPages;

    @JsonProperty("current_page")
    private int currentPage;

    @JsonProperty("total_elements")
    private Long totalElements;

    @JsonProperty("current_page_elements")
    private int currentPageElement;
    }

Сервис:

@Autowired
private SomethingRepository repository;

public SomethingPageDTO getSomething(int pageNo, int pageSize, Long memberId) throws Exception {

Pageable paging = new PageRequest(pageNo, pageSize);

Page<Something> somethingPage = repository.findByMember_Id(memberId, paging);

//map EntityList to DTO

List<SomethingPageDTO > somethingDtos = new ArrayList<>();
return somethingDtos = somethingPage.getContent();
                       //somethingPage.getTotalElements();
                       //somethingPage.getTotalPages();
}

Контроллер:

@RestController
@RequestMapping("/some")
public class EmployeeController 
{
    @Autowired
    somethingService service;

    @GetMapping
    public ResponseEntity<List<Something>> getAll(
                        @RequestParam Integer pageNo, 
                        @RequestParam Integer pageSize,
                        @RequestParam Long memberId

    {
        List<somethingDto> list = service.getSomething(pageNo, pageSize, memberId);

        return new ResponseEntity<List<SomethingDto>>(list, new HttpHeaders(), HttpStatus.OK); 
    }
}

дополнительные ресурсы:

https://dzone.com/articles/pagination-in-springboot-applications

https://howtodoinjava.com/spring-boot2/pagination-sorting-example/

https://www.baeldung.com/rest-api-pagination-in-spring

...