当前位置: 首页 > 知识库问答 >
问题:

当返回值为null时,Optional不引发异常

曹奇文
2023-03-14
    @GetMapping(value = "/compras", produces = "application/json")
public Optional<Compras> retrieveAllCompras(@RequestParam String id) {
    return Optional.of(compraRepository.findById(id)).orElseThrow(RuntimeException::new);

我希望在数据库中找不到该项时出现异常

共有1个答案

巫煌
2023-03-14

optional.of需要纯值。您也可以在文档中找到相关信息,

/**
 * Constructs an instance with the described value.
 *
 * @param value the non-{@code null} value to describe
 * @throws NullPointerException if value is {@code null}
 */
private Optional(T value) {
    this.value = Objects.requireNonNull(value);
}

例如,

jshell> Optional.of(100)
$2 ==> Optional[100]

jshell> Optional.of(null)
|  Exception java.lang.NullPointerException
|        at Objects.requireNonNull (Objects.java:221)
|        at Optional.<init> (Optional.java:107)
|        at Optional.of (Optional.java:120)
|        at (#1:1)

如果您的值在运行时可以为null,则可以使用.ofnullable

jshell> Optional.ofNullable(null)
$3 ==> Optional.empty
jshell> Function<Integer, Optional<Integer>> f = x -> Optional.of(x + 1)
f ==> $Lambda$23/0x0000000801171c40@6996db8

jshell> Function<Integer, Optional<Integer>> g = x -> Optional.of(x * 2)
g ==> $Lambda$24/0x0000000801172840@7fbe847c

jshell> f.apply(5).flatMap(x -> g.apply(x))
$13 ==> Optional[12]
@GetMapping(
  value = "/compras", 
  produces = "application/json"
)
public Optional<Compras> retrieveAllCompras(@RequestParam String id) {
    return Optional.ofNullable(compraRepository.findById(id)); //will response as 200 even when no item found
}
import org.springframework.web.server.ResponseStatusException;
import org.springframework.http.HttpStatus;

@GetMapping(
  value = "/compras", 
  produces = "application/json"
)
public Compras retrieveAllCompras(@RequestParam String id) {
    return Optional.ofNullable(compraRepository.findById(id))
                   .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "item not found"))
}
 类似资料:
  • 问题内容: 我正在使用一个API,该API声称如果成功则返回true,如果失败则返回false。但是,它也声称如果失败,则抛出不同的异常。它如何返回false并引发异常? 问题答案: 不能从单个函数调用中引发异常并返回值。 如果发生错误,它可能会执行类似返回的操作,但是如果输入无效,则会引发异常。 编辑:PaulPRO发布了一个(现已删除)答案,指出从 技术上讲, 有可能在返回当前值时在另一个线程

  • 根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果:

  • 然而,系统的规模越来越大,可能会出现一个错误,即未经授权的用户会通过控制器层,试图通过自定义授权服务访问受保护的数据。 一方面,最适合的异常似乎是(Http 403),但另一方面,抛出500或404以“隐藏”所请求资源的存在可能是更安全的方法。 我考虑了以下例外情况: null

  • 我在做一个基于线性探测的自定义哈希表,在C 11中,我在其中做了一个函数,函数应该返回哈希表中对应键的值,这是我的代码: 问题是,传递的每个键在哈希表中可能没有对应的值。在这个函数中,我无法获得如何处理这个异常。处理这个异常的可能方法是什么?C STL

  • 问题内容: 这是我的原始查询: 这将留下空白,例如: 基于这个问题,我尝试了以下方法,但仍然存在差距,但最重要的是,结果是错误的(数字高出很多): 我怎样才能使结果看起来像这样? 我已经检查了其他几个问题,但它们都涉及联接或我的场景中未涉及的其他因素。 更新 根据评论,我尝试了。此迭代最终成功运行,但结果有些倒退… 结果: 我确认汇总中包括缺少的日期。 问题答案: 因此,我将汇总内容从编辑内容切换

  • 我有一个RecolyerView,当activity启动时,它工作得很好。当我从那个activity去另一个再回来时,recyclerView是空的。它什么也不显示,但有时它返回值,但布局受到干扰,即项目之间有空隙,或布局将有一个很大的空隙,从activity顶部。 类的代码是: 这是activity首先启动时的影像 在此输入图像说明 这是恢复activity时的形象 在此输入图像说明 日志如下所