Прежде всего, я бы предложил упомянуть, что вы храните двоичный объект (LOB) в столбце pic
в своем классе сущности:
@Lob
@Column(name = "pic" , length = 2000)
private byte[] pic;
И затем, похоже, что Thymeleaf не позволяет вам внедрить изображение непосредственно в модель, таким образом, у вас есть 2 способа выполнить sh this:
1.Добавить еще один контроллер для обслуживания изображений
@GetMapping("/students/{id}/image")
public void studentImage(@PathVariable String id, HttpServletResponse response) throws IOException {
var student = entityRepository.findById(id);
var imageDecompressed = decompressBytes(student.get().getPic());
response.setContentType("image/jpeg");
InputStream is = new ByteArrayInputStream(imageDecompressed);
IOUtils(is, response.getOutputStream());
}
, а затем ссылаться на него из модели следующим образом: это:
<img th:src="@{'students/' + @{studentId} + '/image'}">
2.Использование base64
Вам необходимо закодировать изображение в виде строки base64:
var base64EncodedImage = Base64.getEncoder().encodeToString(imageData);
, а затем выполнить настройку в модели следующим образом:
<img th:src="@{'data:image/jpeg;base64,'+${base64EncodedImage}}"/>
Я бы предложил использовать первый способ, потому что в противном случае вы зависели бы от размера изображения, а общая полезная нагрузка была бы на 30% больше (base64), поэтому, используя первый способ, вы позволяете браузеру пользователя решать, как и когда загрузить определенное изображение