如何在Play中将所有入站请求转换为UTF-8!骨架

时间:2013-06-24 17:42:25

标签: java scala playframework netty

由于向后兼容性,默认情况下,所有未定义字符集的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上的全局拦截器!水平。

1 个答案:

答案 0 :(得分:0)

Request对象有一个body()方法,用于返回请求的正文。

RequestBody类型的正文有一个asRaw()方法,可返回Http.RawBuffer

从那里你可以获得正文的byte []并根据需要处理它。例如,String允许您从指示Charset的byte []创建一个String(请参阅documentation),并且您可以从请求中的标题中获取charset,然后可以创建正确的字符串。

修改

在回答评论时,要应用此功能,您可能希望使用BodyParser代替Global