Spring Controller中ResponseEntity<?>如何替换为匹配Optional返回的明确泛型
Spring Controller ResponseEntity泛型替换方案
- 你尝试定义的
ResponseEntity<Optional<DestinyDTO>>是不正确的:你现有代码中已经通过map操作对Optional<DestinyDTO>做了解包,最终成功响应的body是DestinyDTO实例,而非整个Optional容器,泛型声明与实际返回的body类型不匹配。 - 直接将返回类型声明为
ResponseEntity<DestinyDTO>即可,修改后的代码如下:
@GetMapping(value = "/{id}") public ResponseEntity<DestinyDTO> getById(@PathVariable Long id) { return myService.getById(id) .map(ResponseEntity::ok) .orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR)); }
- 逻辑说明:
ResponseEntity的泛型仅需要声明成功响应下的body类型,异常分支返回无body的状态码时,body默认为null,符合DestinyDTO类型的允许范围,完全匹配你现有代码的执行逻辑。
内容的提问来源于stack exchange,提问作者user16807416
相关产品推荐
相关产品推荐

