【发布时间】:2014-02-07 16:47:21
【问题描述】:
我的目标是合并/缩小所有 css 文件并将结果作为字符串返回。
这是我的 Spring 测试方法:
@RequestMapping(value = "/stylesheet.css", method = RequestMethod.GET, produces = "text/css")
@ResponseBody
public void css(HttpServletResponse response) {
File path = new File(servletContext.getRealPath("/WEB-INF/includes/css/"));
File[] files = path.listFiles(...);
for (File file : files) {
InputStream is = new FileInputStream(file);
IOUtils.copy(is, response.getOutputStream());
response.flushBuffer();
is.close();
}
}
这适用于 Chrome、Firefox 和 Safari,但不适用于 IE 和 Opera。
在检查器中进行一些检查后,URL https://host/project/stylesheet.css 正在加载到每个浏览器中。我可以看到内容,但似乎无法识别为text/css。
此外,即使使用produces = "text/css",我也无法在所有浏览器中看到content-type http 标头。
IE登录错误:
CSS ignored because of mime type incompatibility
有谁知道如何正确地做到这一点?
工作代码:
@RequestMapping(value = "/stylesheet.css", method = RequestMethod.GET)
public ResponseEntity<Void> css(HttpServletResponse response) {
response.setContentType("text/css");
File path = new File(servletContext.getRealPath("/WEB-INF/includes/css/"));
File[] files = path.listFiles(...);
for (File file : files) {
InputStream is = new FileInputStream(file);
IOUtils.copy(is, response.getOutputStream());
IOUtils.closeQuietly(is);
}
response.flushBuffer();
return new ResponseEntity<Void>(HttpStatus.OK);
}
【问题讨论】:
-
查看stackoverflow.com/questions/8226863/… 但我注意到您的控制器正在生成
text/css。 IE 的精确版本可能很重要。 -
感谢您的回答。我实际上使用的是 IE11。
-
您正在使用哪些消息转换器(您的 bean 配置文件的
<mvc:message-converters>部分中有什么)?这可能是一个内容协商问题,结果使用了错误的 MIME 类型。 -
你能检查生成响应的标题吗?它应该包含: Content-Type: text/css
-
我不想返回字符串...流更适合内存使用。
标签: java css spring spring-mvc