Java 8可选 返回True为什么?

问题描述 投票:-1回答:1

我有一个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)当使用REST控制器调用getClientId且REDISC Cache中不存在clientId时,则:

Service class Code returns: In EquityFeedService []

The REST Controller returns: Client Id: Optional[[]] 

在REST控制器中,代码进入if循环内,并且由于列表为空,因此屏幕上不显示任何内容,即

if(cId.isPresent()) {
           return ResponseEntity.ok(cId);
 }

为什么?为什么cId.isPresent()返回true,并且代码进入if循环内。理想情况下,代码应该进入else循环内并抛出异常,因为List为空。这仅在List的情况下发生,这似乎是我的另一个具有POJO返回类型的方法没有此问题。

[请帮助我了解此行为以及解决该问题的方法。

我有一个REST控制器@GetMapping(“ / getByClientId / {clientId}”)公共ResponseEntity >> getByClientId(@PathVariable(“ clientId”)最终字符串clientId)...]]

spring-boot rest java-8 optional
1个回答
0
投票
cId.isPresent()返回true,因为List<EquityFeeds>不为null,它为空列表

if(!cId.get().isEmpty()) { return ResponseEntity.ok(cId); } else { cId.orElseThrow(() -> new ClientIdNotFoundException(clientId)); }

© www.soinside.com 2019 - 2024. All rights reserved.