如何解决Java 8可选无值
尽管我的数据库(MySQL)的数据存储名称不正确,但我的图像没有得到返回并且抛出错误NO VALUE PRESENT,我已经将此功能设为可选并使用了
X['image1']
这是我的道课
X['image2']
这是我定义了mysql数据库的模型类
@GetMapping(path = { "/get/{imageName}" })
public ImageModel getImage(@PathVariable("imageName") String imageName) throws IOException {
final Optional<ImageModel> retrievedImage = imageRepository.findByName(imageName);
ImageModel img = new ImageModel(retrievedImage.get().getName(),retrievedImage.get().getType(),decompressBytes(retrievedImage.get().getPic()));
return img;
}
解决方法
提示在名称中。 Optional
对象是指不必一定存在的对象。您需要告诉应用程序如果不存在Optional
的实例怎么办:
final Optional<ImageModel> retrievedImage = imageRepository.findByName(imageName);
return retrievedImage.get().orElse(null);
WRT您的数据查询未返回您要查找的内容,我想这是一个单独的问题,并且您提供的代码没有详细说明该数据库查询。
,可选模式(也可以是monad)使您可以控制是否存在数据流,这有助于避免空指针异常(十亿美元的错误)
您可以使用以下两种方法来选择可选模式:
-
optional.ifPresent(e-> decompress(e))
-
optional.orElseGet
(如果是用例,则返回一个新图像)。 -
optional.orElseThrow(...)
例如,如果您想在没有异常的情况下引发异常 图片存在于数据库中,并以此方式阻止流程。 -
在if条件中使用
optional.isPresent()
来处理图像为空的情况。
更精确地控制流量,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。