首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8可选不存在值

Java 8可选不存在值
EN

Stack Overflow用户
提问于 2020-08-11 22:13:21
回答 2查看 494关注 0票数 0

我已经将此函数设为可选,并使用了可选项,尽管我的图像没有得到返回并且抛出了一个错误:即使我的db (MySQL)具有以名称存储的数据,也没有值

代码语言:javascript
复制
@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;
}

这是我的道类。

代码语言:javascript
复制
public interface ImageRepository extends JpaRepository<ImageModel, Long> {
    Optional<ImageModel> findByName(String name);
    Optional<ImageModel> findById(Long id);
}

这是我定义mysql数据库的模型类

代码语言:javascript
复制
@Entity
@Table(name = "image_table")
public class ImageModel {
    public ImageModel() {
        super();
    }
    public ImageModel(String name, String type, byte[] pic) {
        this.name = name;
        this.type = type;
        this.pic = pic;
    }
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "name")
    private String name;
    //image bytes can have large lengths so we specify a value
    //which is more than the default length for picByte column
    @Column(name = "pic", length = 1000)
    private byte[] pic;
    @Column(name = "type")
    private String type;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public byte[] getPic() {
        return pic;
    }

    public void setPic(byte[] pic) {
        this.pic = pic;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2020-08-11 22:17:31

提示在名称中。Optional对象指的是不一定要存在的对象。您需要告诉应用程序,如果Optional实例不存在,该如何处理:

代码语言:javascript
复制
final Optional<ImageModel> retrievedImage = imageRepository.findByName(imageName);
return retrievedImage.get().orElse(null);

WRT你的数据查询没有返回你正在寻找的东西,我想说这是一个单独的问题,并且你给出的代码没有详细说明数据库的查询。

票数 0
EN

Stack Overflow用户

发布于 2020-08-11 23:21:33

可选模式(也叫monad)允许您在数据存在与否时控制流,这有助于避免空指针异常(数十亿美元的错误)

您可以通过使用以下任一方法来利用可选模式:

  1. optional.ifPresent(e-> decompress(e))

如果这是用例,则返回新图像)。

例如,如果您想要在数据库中不存在图像时抛出异常并以这种方式停止流,则为

  1. optional.orElseThrow(...)

  1. 在if条件中使用optional.isPresent()处理图像为null的情况。

更精确地控制你的流量

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63360017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档