Niechciany status HTTP 401 przy pustej liście, zamiast 200

0

Mam endpoint testowy, który ma zwracać z tabeli wszystkich handlowców - zwraca wszystkie rekordy z tablicy. Działa ok, dopóki coś w tablicy jest. W momencie kiedy tablica jest pusta zwraca mi 401. Chcę, żeby zwracał 200 i pustą tablicę. Jak to zrobić? Dzięki. Gdzie może być problem, jak to ugryźć?

Używam: SpringBoot, Keycloak. Bazą jest postgres, ORM - hibernate. REST

Kontroler:

@GetMapping
@RolesAllowed({ADMIN_ROLE, USER_ROLE})
public ResponseEntity<ListResponse<AccountDto>> getSales(
  HttpServletRequest request,
  @RequestParam(PAGE_REQUEST_PARAM_NAME) Integer page,
  @RequestParam(PAGE_SIZE_REQUEST_PARAM_NAME) Integer pageSize) throws Exception {

  SecurityGroupContext securityGroupContext = (SecurityGroupContext)request.getAttribute(SECURITY_GROUP_CONTEXT);
  SearchSaleDto dto = SearchSaleDto
    .builder()
    .page(page)
    .pageSize(pageSize)
    .phrase(search)
    .isAdmin(securityGroupContext.isAdmin())
    .authGroups(securityGroupContext.getContextList())
    .build();
  return ok(saleService.getSales(dto)
);

Wyciąganie recordów:

public ListResponse<AccountDto> getSales(SearchSaleDto dto) throws Exception {
    validatePaging(dto.getPage(), dto.getPageSize());
    int internalPage = dto.getPage() - 1;
    Page<Sale> salePage = saleRepository
            .findSales(PageRequest.of(internalPage, dto.getPageSize()), dto);
    List<AccountDto> accounts = salePage
        .stream()
        .map(saleConverter::toDto)
        .collect(toList());
    Long total = salePage.getTotalElements();
    ResponseMetadata metadata = prepareMetadata(dto.getPage(), dto.getPageSize(), internalPage, total);
    return new ListResponse<>(accounts, metadata);
}
4

Patrząc na ten kod strzelam, że w którymś momencie leci Exception, który jest tłumaczony z jakiegoś powodu na 401.

Jakbym miał strzelać to ten kawałek: new ListResponse<>(accounts, metadata) się pewnie wykrzacza - natomiast co jest w środku trudno wyrokować.
Druga opcja jest taka, że saleRepository.findSales(pageRequest, dto) robi coś nie tak - np. zwróci null'a gdy nie ma żadnych rekordów.

0
    public static ResponseMetadata prepareMetadata(final Integer page, final Integer pageSize, final int currentPage, final Long total) {
        Double pages = Math.floor(total.doubleValue() / pageSize.doubleValue());
        return new ResponseMetadata(page, pageSize, total, pages.longValue() > (long)currentPage, page > 1);
    }
0

FYI: Okazało się w końcu, że kod jest poprawny i leci 200. Dzięki za ciekawe podpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1