由于向后兼容性,所有未定义字符集的 HTTP 请求默认转换为 ISO-8859-1。我们的网络服务 Play!如果这些请求已定义字符集,应用程序将正确接收带有 JSON 正文的 PUT 请求。如果没有,这些请求应该以某种方式转换为 UTF-8,最好是在全局应用程序级别。
因此,我创建了一个 Global.scala 类,该类将负责接收所有入站请求并将这些“未定义”转换为 UTF-8,这将确保在进入相应模块之前正确处理所有请求。
import play.*;
public class Global extends GlobalSettings {
@Override
public Action onRequest(Request request, Method actionMethod) {
return super.onRequest(request, actionMethod);
}
}
在这个“过滤器”方法中,现在缺少代码片段,它将查询请求是 PUT 还是 POST 并且没有定义字符编码,并将此请求的正文从 ISO-8859-1 转换为 UTF-8,否则它将转换请求的正文从它所在的任何字符集转换为 UTF-8。
Apache Tomcat 通过过滤器解决了这个问题:http ://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q3
我在 Netty 中没有发现任何类似于 Tomcat 的功能,只有 Play 上的这个 Global 拦截器!等级。