Java 如何根据是否存在可选值返回值?
我在控制器中使用可选选项Java 如何根据是否存在可选值返回值?,java,Java,我在控制器中使用可选选项 @GetMapping(value = "/address/{id}") public ResponseEntity<Addresses> getAddressById(@PathVariable("id") Integer id) { Optional<Address> address = addressService.getAddressById(id); return new ResponseEntity(address.
@GetMapping(value = "/address/{id}")
public ResponseEntity<Addresses> getAddressById(@PathVariable("id") Integer id) {
Optional<Address> address = addressService.getAddressById(id);
return new ResponseEntity(address.get(), address.isPresent() ? HttpStatus.OK : HttpStatus.NOT_FOUND);
}
我不确定这是不是一个管理事情的好方法
有什么好的做法吗?试试这个:
return address.isPresent()
? new ResponseEntity(address.get(), HttpStatus.OK)
: new ResponseEntity(HttpStatus.NOT_FOUND);
使用当前代码,无论值是否存在,都将调用address.get()
请注意,对于信息量更大的NOT_FOUND
响应(响应代码404),您可能仍然应该在响应中包含一个主体(我建议的代码没有这样做)。从:
除响应HEAD请求外,服务器应发送一个表示,其中包含对错误情况的解释,以及错误是暂时的还是永久性的
根据法律,关键词“应该”是指:
在特定情况下,可能存在忽略特定项目的正当理由,但在选择不同课程之前,必须理解并仔细权衡其全部影响
试试这个:
return address.isPresent()
? new ResponseEntity(address.get(), HttpStatus.OK)
: new ResponseEntity(HttpStatus.NOT_FOUND);
使用当前代码,无论值是否存在,都将调用address.get()
请注意,对于信息量更大的NOT_FOUND
响应(响应代码404),您可能仍然应该在响应中包含一个主体(我建议的代码没有这样做)。从:
除响应HEAD请求外,服务器应发送一个表示,其中包含对错误情况的解释,以及错误是暂时的还是永久性的
根据法律,关键词“应该”是指:
在特定情况下,可能存在忽略特定项目的正当理由,但在选择不同课程之前,必须理解并仔细权衡其全部影响
你错过了Optionals流畅的品质。把它们想象成一条小溪:
@GetMapping(value = "/address/{id}")
public ResponseEntity<Address> getAddressById(@PathVariable("id") Integer id) {
return addressService.getAddressById(id)
.map(ResponseEntity::ok)
.orElse(new ResponseEntity<Address>(NOT_FOUND));
}
@GetMapping(value=“/address/{id}”)
公共响应属性getAddressById(@PathVariable(“id”)整数id){
return addressService.getAddressById(id)
.map(ResponseEntity::ok)
.orElse(新的响应(未找到));
}
您缺少流畅的选项质量。把它们想象成一条小溪:
@GetMapping(value = "/address/{id}")
public ResponseEntity<Address> getAddressById(@PathVariable("id") Integer id) {
return addressService.getAddressById(id)
.map(ResponseEntity::ok)
.orElse(new ResponseEntity<Address>(NOT_FOUND));
}
@GetMapping(value=“/address/{id}”)
公共响应属性getAddressById(@PathVariable(“id”)整数id){
return addressService.getAddressById(id)
.map(ResponseEntity::ok)
.orElse(新的响应(未找到));
}
是:未先选中.ifPresent()
,或未使用.else()
,请勿使用.get()
。如果地址
为空可选
,您希望在响应实体中输入什么值?我不理解您的问题。你为什么认为这是个好办法?你显然想退回404。这并不能做到这一点。只需分支并有两个返回语句。但是首先要弄清楚如果没有地址,你希望主体是什么。是的:在没有先检查.ifPresent()
或者没有使用.else()
的情况下,不要使用.get()
。如果地址
为空可选
,您希望在响应实体中输入什么值?我不理解您的问题。你为什么认为这是个好办法?你显然想退回404。这并不能做到这一点。只需分支并有两个返回语句。但是如果没有地址,首先要弄清楚你想要的尸体是什么。