You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:29:13