Struts中使用HttpServletResponse时如何移除Content-type中的charset
解决ServletResponse自动添加charset到Content-Type的问题
这个问题我之前也碰到过!当你用response.setContentType("application/json")时,Servlet容器会自动帮你追加默认的字符编码(比如ISO-8859-1),这是因为setContentType方法本身会结合当前设置的字符编码来生成完整的Content-Type头。
要让Content-Type严格保持为application/json不带charset,你可以直接用setHeader方法来手动设置响应头,绕过容器的自动补充逻辑:
// 替换原来的setContentType,改用setHeader直接设置 response.setHeader("Content-Type", "application/json"); response.getWriter().println(json);
为什么这个方法有效?
setContentType内部会调用setCharacterEncoding(如果没显式设置过的话会用容器默认编码),然后把编码拼到Content-Type里。而setHeader是直接将指定的键值对写入响应头,不会做任何额外的拼接处理,所以能精准得到你想要的application/json头。
另外要注意:如果你的代码之前显式调用过response.setCharacterEncoding(),那即使改用setHeader,有些容器可能还是会偷偷追加charset?不过这种情况很少见,大部分情况下直接用setHeader就能解决问题。你可以用浏览器的开发者工具或者curl命令验证一下响应头,确认是否符合预期。
内容的提问来源于stack exchange,提问作者Dareka
相关产品推荐
相关产品推荐

