您可以将HTML图像标签的src属性设置为控制器方法吗?
问题内容:
我知道你可以做到
<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" />
我已经测试过,控制器肯定被命中,但是页面上没有图像。
问题答案:
我相信问题是Spring将默认内容类型设置为application/octet- stream
,浏览器无法那样读取XML。相反,您实际上需要Content- Type
通过HttpServerletResponse
或使用Spring的来设置标头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
(有许多受支持的类型)。