Wildfly中GZIP编码触发非法字符异常问题求助
问题核心原因
客户端发送了gzip压缩的请求体,但Wildfly的RESTEasy框架没有自动做解压缩处理,直接把原始的gzip二进制数据传给Jackson解析JSON。而gzip的起始标记是ASCII码31的控制字符,不属于JSON允许的空白字符范围,所以触发了这个解析异常。另外注意:客户端应该用标准的Content-Encoding: gzip请求头,而非Encoding: gzip,错误的头字段会导致服务端无法识别需要解压缩。
解决办法
注册解压缩拦截器(代码方式)
在你的JAX-RS应用类中添加RESTEasy的GzipDecodingInterceptor,让服务端自动处理gzip压缩的请求:import org.jboss.resteasy.plugins.interceptors.GzipDecodingInterceptor; import javax.ws.rs.core.Application; import java.util.HashSet; import java.util.Set; public class YourApplication extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> classes = new HashSet<>(); classes.add(GzipDecodingInterceptor.class); // 这里添加你的REST资源类 return classes; } }全局配置Wildfly(XML方式)
直接修改Wildfly的standalone.xml或domain.xml,在jaxrs子系统中启用gzip支持:<subsystem xmlns="urn:jboss:domain:jaxrs:1.0"> <property name="resteasy.gzip.enabled">true</property> <!-- 可选:设置最大允许的压缩输入大小,单位字节 --> <property name="resteasy.gzip.max.input">10485760</property> </subsystem>
内容的提问来源于stack exchange,提问作者assylias
相关产品推荐
相关产品推荐

