2

我知道你可以做到这一点

<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" />

我已经测试过,控制器肯定被击中,但页面上没有显示图像。

4

1 回答 1

3

我认为问题在于 Spring 将默认内容类型设置为application/octet-stream,浏览器无法读取您的 XML。相反,您需要通过Spring 或使用 Spring实际设置Content-Type标头。HttpServerletResponseResponseEntity

@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相应地参数化(有许多支持的类型)。

于 2013-10-04T20:38:25.013 回答