如何简化Optional嵌套校验逻辑 实现符合条件时统一抛出异常
优化后实现代码
public ResponseEntity<SimpleResponses> get() { HttpEntity<Object> httpEntity = this.getEntity(); ResponseEntity<SimpleResponses> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, SimpleResponses.class); // 合并所有异常校验条件,任意满足即抛出异常 if (!responseEntity.getStatusCode().is2xxSuccessful() || responseEntity.getBody() == null || responseEntity.getBody().getSimpleResponsesList().stream() .noneMatch(resp -> "200".equals(resp.getHttpCode()))) { throw new CustomRuntimeException("Failed ..... "); } return responseEntity; }
优化点说明
- 调整校验优先级,优先判断接口整体状态码,非2xx时直接触发异常逻辑,无需执行后续空值、列表遍历操作,减少无效计算
- 合并三类异常判断到同一逻辑分支,消除重复抛异常的冗余代码,可读性大幅提升
- 补全了原代码缺失的
responseEntity.getBody()为空的异常判断逻辑,完全匹配需求要求 - 用Stream原生的
noneMatch方法替代原来filter+findAny+isPresent的嵌套判断,简化列表匹配逻辑,代码更简洁 200写在equals前,避免httpCode为null时触发空指针异常,鲁棒性更强- 注:原代码中调用的
SimpleResponses::getSimpleResponses和给出的实体类字段名simpleResponsesList不匹配,优化代码已修正为对应getter方法,若实际项目中getter命名不同可自行调整
内容的提问来源于stack exchange,提问作者karvai
相关产品推荐
相关产品推荐

