У меня есть контроллер REST
@GetMapping("/getByClientId/{clientId}")
public ResponseEntity<Optional<List<EquityFeeds>>> getByClientId(@PathVariable("clientId") final String clientId) {
Optional<List<EquityFeeds>> cId = Optional.ofNullable(equityFeedsService.findByClientId(clientId));
System.out.println("Client Id: "+cId);
if(cId.isPresent()) {
return ResponseEntity.ok(cId);
} else {
cId.orElseThrow(() -> new ClientIdNotFoundException(clientId));
}
return ResponseEntity.ok(cId);
}
Код класса обслуживания:
public List<EquityFeeds> findByClientId(String clientId) {
List<EquityFeeds> cId = equityFeedsRedisRepositoryImpl.findByClientId(clientId);
System.out.println("In EquityFeedService "+cId);
return cId;
}
Вкл. Код (REDIS):
public List<EquityFeeds> findByClientId(String clientId) {
return (List<EquityFeeds>) listOperations.range(clientId, 0, -1);
}
Проблема: 1) Когда getClientId вызывается с использованием контроллера REST, а clientId отсутствует в кэше REDIS, тогда:
Service class Code returns: In EquityFeedService []
The REST Controller returns: Client Id: Optional[[]]
В REST Controller код идет внутри if l oop и ничего не отображает на экране, так как список пуст, т.е.
if(cId.isPresent()) {
return ResponseEntity.ok(cId);
}
Почему? Почему cId.isPresent () возвращает true, а код идет внутри if l oop. В идеале код должен go внутри else l oop и выдавать исключение, так как список пуст. Это происходит только в случае с List, так как мой другой метод с возвращаемым типом POJO не имеет этой проблемы.
Пожалуйста, помогите мне понять это поведение и что нужно сделать, чтобы это исправить.