WildFly切换standalone-full.xml配置后RestEasy返回UTF-8俄文乱码问题
WildFly 切换 standalone-full.xml 后 RestEasy 返回俄文乱码的修复方案
问题根因
该问题和代码层的@Produces(MediaType.TEXT_PLAIN + ";charset=utf-8")声明无直接关联,核心触发点为standalone-full.xml 为独立配置文件,默认未同步 standalone.xml 中的编码适配规则:
- 默认 standalone.xml 环境下自带适配的UTF-8编码配置,原有通用编码调整如果是修改的 standalone.xml,不会自动同步到独立的 full 配置中
- Windows 环境下 JVM 默认使用 GBK 编码序列化响应实体,即使代码层声明了UTF-8输出,未配置Undertow层的默认编码时,会被容器层的默认编码规则覆盖,最终导致俄文乱码
修复步骤
- 配置全局JVM编码属性
打开standalone/configuration/standalone-full.xml,定位到<system-properties>节点(不存在则添加在<extensions>节点结束后),新增UTF-8编码相关属性:<system-properties> <property name="file.encoding" value="UTF-8"/> <property name="org.jboss.resteasy.parameter.charset" value="UTF-8"/> </system-properties> - 配置Undertow容器默认编码
定位到 xml 中的 Undertow 子系统节点,在<servlet-container>标签上新增default-encoding="UTF-8"属性,示例配置(子系统版本号和实际WildFly版本匹配即可):<subsystem xmlns="urn:jboss:domain:undertow:12.0"> <buffer-cache name="default"/> <servlet-container name="default" default-encoding="UTF-8"> <jsp-config/> <websockets/> </servlet-container> <!-- 其余原有配置保持不变 --> </subsystem>
验证排坑
- 修改完成后重启WildFly服务,调用接口先检查响应头的
Content-Type字段,确认正确携带charset=utf-8标识 - 若响应头编码正确但实体仍乱码,检查 full 配置的 Resteasy 子系统是否存在强制字符集覆盖配置,移除所有非UTF-8的charset相关强制参数
- 所有编码配置需和当前加载的
standalone-full.xml绑定,仅修改 standalone.xml 或启动脚本的通用参数无法生效
内容的提问来源于stack exchange,提问作者rulila52
相关产品推荐
相关产品推荐

