Spring Boot 如何在Thymeleaf Sping Boot 中检查image值是否为null或非null/(是否存在)

ldxq2e6h  于 2023-06-05  发布在  Spring
关注(0)|答案(1)|浏览(239)

我在我的索引页中显示的图像如下
<img th:src="@{${'/image/'+id}}" />为了检查图像的值是否为null,以避免显示没有图像的img标签,我使用了if和unless:
<img th:if="${'/image/'+id} == null" th:src="@{${'/image/'+id}" style="width: 0px;" /> <img th:unless="${'/image/'+id} == null" th:src="@{${'/image/'+id}}" style="width: 50px;" />我没有成功。
控制器类的方法如下

@GetMapping("/image/{id}")
void showImage(@PathVariable("id") Long id, HttpServletResponse response, Optional<ClassImage> classImage)
    throws ServletException, IOException {
        log.info("Id :: " + id);
        classImage = classImageService.getClassImageById(id);
        response.setContentType("image/jpeg, image/jpg, image/png, image/gif");
        response.getOutputStream().write(classImage.get().getImage());
       response.getOutputStream().close();
}

我是一个初学者,想请您的帮助。
我不知道怎么做

b09cbbtk

b09cbbtk1#

如我所见,您希望根据可用性实现区分大小写的图像显示。请尝试下面的更改。您的Thymeleaf模板将像这样:

<img th:if="${classImage.isPresent()}" th:src="@{'/image/' + id}" style="width: 50px;" />
<img th:unless="${classImage.isPresent()}" th:src="@{'/image/' + id}" style="width: 0px;" />

再走一步:您的控制器将具有更新的showImage()函数。

@GetMapping("/image/{id}")
public ResponseEntity<byte[]> showImage(@PathVariable("id") Long id) {
    Optional<ClassImage> classImageOptional = classImageService.getClassImageById(id);
    
    if (classImageOptional.isPresent()) {
        ClassImage classImage = classImageOptional.get();
        
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.IMAGE_JPEG); // Update the media type based on your image format
        
        return new ResponseEntity<>(classImage.getImage(), headers, HttpStatus.OK);
    } else {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}

希望我的尝试能帮到你。

相关问题