使用Thymeleaf显示编码图片时抛出异常(Java、Spring Boot)
问题分析与解决方案
你的问题出在Thymeleaf的表达式语法错误上:在th:src的*{}表达式中嵌套了${}变量表达式,导致SpringEL解析器无法正确处理。
修正后的写法(三种可选)
方法1:直接在SpringEL表达式中拼接
<img th:src="*{ 'data:image/jpeg;base64,' + encodedImage }" alt="Profile Picture">
这里*{}是Thymeleaf的选择变量表达式,直接引用model中的encodedImage变量即可,无需再用${}包裹。
方法2:使用Thymeleaf字符串字面量拼接(更简洁)
<img th:src="|data:image/jpeg;base64,${encodedImage}|" alt="Profile Picture">
|...|是Thymeleaf提供的字符串拼接语法,可以直接将静态字符串和变量表达式组合,无需手动写加号。
方法3:使用SpringEL的字符串拼接方法
<img th:src="${#strings.concat('data:image/jpeg;base64,', encodedImage)}" alt="Profile Picture">
借助Thymeleaf内置的#strings工具类的concat方法完成字符串拼接。
额外优化建议
如果你的系统支持多种图片格式(比如png、gif),建议在数据库中同时存储图片的MIME类型(比如image/jpeg、image/png),前端动态拼接时使用该类型,避免格式不匹配导致图片无法显示的问题。
内容的提问来源于stack exchange,提问作者no way
相关产品推荐
相关产品推荐

