【发布时间】:2016-02-27 05:03:25
【问题描述】:
我正在使用以下过滤器,明确设置对 application/json 的响应的内容类型:
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
filterChain.doFilter(servletRequest, servletResponse);
}
但是,它不起作用,并且在浏览器中请求时的内容类型是 text/html。其他标题工作正常。
【问题讨论】:
-
HttpServletResponse下游会发生什么? -
filterChain下方是否覆盖了标题?如果将setContentType移到doFilter之后会怎样? -
响应由 Spring @RestController 调度。将 setContentType 移动到方法的底部并没有改变结果。
标签: java servlets http-headers mime-types