如何在Thymeleaf中展示BufferedImage?
如何在Thymeleaf中直接展示BufferedImage?
我正在开发《万智牌》简易桌面模拟器来自学Spring Boot,当前想实现从Scryfall API获取卡牌图片并在Thymeleaf中展示。目前能通过传入Scryfall的URI来临时实现展示,但我想改成直接在Thymeleaf里展示BufferedImage,不知道具体该怎么做。
当前临时实现
控制器代码
package mtg; import java.util.Map; import org.springframework.boot.json.BasicJsonParser; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; @Controller @RequestMapping("/sample") public class SampleCardController { @ModelAttribute public void addCardToModel(Model model) { RestTemplate rest = new RestTemplate(); String jsonString = rest.getForObject( "https://api.scryfall.com/cards/random", String.class); BasicJsonParser parser = new BasicJsonParser(); Map<String, Object> map = parser.parseMap(jsonString); String name = (String) map.get("name"); String uri = (String) map.get("uri"); model.addAttribute("cardName", name); model.addAttribute("imageURI", uri + "?format=image"); } @GetMapping public String showSampleCard() { return "sample"; } }
Thymeleaf模板(sample.html)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <title>Sample</title> </head> <body> <h1>Here's a sample card!</h1> <h3 th:text="${cardName}"></h3> <img th:src="${imageURI}"/> </body> </html>
目标实现的控制器代码
我想改成直接获取BufferedImage并传入模型,但不知道怎么在Thymeleaf中展示这张图片:
package mtg; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; import javax.imageio.ImageIO; import org.springframework.boot.json.BasicJsonParser; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; @Controller @RequestMapping("/sample") public class SampleCardController2 { @ModelAttribute public void addCardToModel(Model model) { RestTemplate rest = new RestTemplate(); String jsonString = rest.getForObject( "https://api.scryfall.com/cards/random", String.class); BasicJsonParser parser = new BasicJsonParser(); Map<String, Object> map = parser.parseMap(jsonString); String name = (String) map.get("name"); String imageURI = (String) map.get("uri"); BufferedImage image = null; try { image = ImageIO.read(new URL(imageURI + "?format=image")); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } model.addAttribute("cardName", name); model.addAttribute("image", image); } @GetMapping public String showSampleCard() { return "sample"; } }
问题
Thymeleaf的img标签似乎只能通过th:src属性传入URL,有没有类似th:text="${cardName}"的方式,直接使用模型中的BufferedImage属性来展示图片?
编辑:可查看下方@Lee Greiner的评论获取模板修复方法。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

