我已经将此函数设为可选,并使用了可选项,尽管我的图像没有得到返回并且抛出了一个错误:即使我的db (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;
}这是我的道类。
public interface ImageRepository extends JpaRepository<ImageModel, Long> {
Optional<ImageModel> findByName(String name);
Optional<ImageModel> findById(Long id);
}这是我定义mysql数据库的模型类
@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;
}
}发布于 2020-08-11 22:17:31
提示在名称中。Optional对象指的是不一定要存在的对象。您需要告诉应用程序,如果Optional实例不存在,该如何处理:
final Optional<ImageModel> retrievedImage = imageRepository.findByName(imageName);
return retrievedImage.get().orElse(null);WRT你的数据查询没有返回你正在寻找的东西,我想说这是一个单独的问题,并且你给出的代码没有详细说明数据库的查询。
发布于 2020-08-11 23:21:33
可选模式(也叫monad)允许您在数据存在与否时控制流,这有助于避免空指针异常(数十亿美元的错误)
您可以通过使用以下任一方法来利用可选模式:
optional.ifPresent(e-> decompress(e))如果这是用例,则返回新图像)。
例如,如果您想要在数据库中不存在图像时抛出异常并以这种方式停止流,则为
optional.orElseThrow(...)。optional.isPresent()处理图像为null的情况。更精确地控制你的流量
https://stackoverflow.com/questions/63360017
复制相似问题