我知道你可以做到这一点
<img src="http://some_svg_on_the_web" />
但是如果我有一个用@ResponseBody
@RequestMapping(value="getSVG")
public @ResponseBody String getSVG(HttpServletRequest request, HttpServerletResponse response) {
String SVG = // build the SVG XML as a string
return SVG;
}
我可以说
<img src="/getSVG" />
我已经测试过,控制器肯定被击中,但页面上没有显示图像。
答案 0 :(得分:2)
我认为问题是Spring将默认内容类型设置为application/octet-stream
,浏览器无法读取您的XML。相反,您需要通过Content-Type
或Spring HttpServerletResponse
实际设置ResponseEntity
标头。
@RequestMapping(value="getSVG")
public @ResponseBody ResponseEntity<String> getSVG(HttpServletRequest request, HttpServerletResponse response) {
String SVG = // build the SVG XML as a string
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.valueOf("image/svg+xml"));
ResponseEntity<String> svgEntity = new ResponseEntity<String>(svg, headers, HttpStatus.OK);
return svgEntity;
}
您将XML作为String
并不重要,您可以使用getBytes()
制作内容byte[]
。您还可以使用Resource
类让Spring直接从类路径或文件系统资源中获取字节。您将相应地参数化ResponseEntity
(有许多支持的类型)。