【发布时间】:2020-04-10 17:10:47
【问题描述】:
我有一个 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 并且 clientId 不存在于 REDIS 缓存中时:
Service class Code returns: In EquityFeedService []
The REST Controller returns: Client Id: Optional[[]]
在 REST 控制器中,代码进入 if 循环并在屏幕上不显示任何内容,因为 List 为空,即
if(cId.isPresent()) {
return ResponseEntity.ok(cId);
}
为什么?为什么 cId.isPresent() 返回 true 并且代码进入 if 循环。理想情况下,代码应该进入 else 循环并抛出异常,因为 List 是空的。仅在 List 的情况下会发生这种情况,因为我的其他返回类型为 POJO 的方法似乎没有此问题。
请帮助我了解此行为以及应采取哪些措施来解决此问题。
【问题讨论】:
-
Optional.ofNullable 检查是否为空。空列表不为空。
-
那么我该如何解决这个问题。当列表为空时,我想引发用户定义的异常。我该如何解决这种情况。
标签: java spring-boot rest java-8 optional