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。这并不能做到这一点。只需分支并有两个返回语句。但是如果没有地址,首先要弄清楚你想要的尸体是什么。