由于向后兼容性,默认情况下,所有未定义字符集的HTTP请求都将转换为ISO-8859-1。我们的网络服务玩!应用程序正确接收与JSON正文的PUT请求,如果这些请求已定义charset。如果没有,那些请求应该以某种方式转换为UTF-8,最好是在全局应用程序级别。
所以我创建了一个Global.scala类,负责接收所有入站 请求并将这些'undefined'转换为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上的全局拦截器!水平。
答案 0 :(得分:0)
Request
对象有一个body()
方法,用于返回请求的正文。
该RequestBody
类型的正文有一个asRaw()
方法,可返回Http.RawBuffer。
从那里你可以获得正文的byte []并根据需要处理它。例如,String
允许您从指示Charset的byte []创建一个String(请参阅documentation),并且您可以从请求中的标题中获取charset
,然后可以创建正确的字符串。
修改强>
在回答评论时,要应用此功能,您可能希望使用BodyParser代替Global
类