首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Play中将所有入站请求转换为UTF-8!框架

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

Stack Overflow用户
提问于 2013-06-25 01:42:25
回答 1查看 1.9K关注 0票数 1

由于向后兼容,默认情况下,所有未定义字符集的HTTP请求都会转换为ISO-8859-1。我们的内线发球了!应用程序正确接收带有JSON主体的PUT请求,前提是这些请求定义了字符集。如果没有,这些请求应该以某种方式转换为UTF-8,最好是在全局应用程序级别。

因此,我创建了一个Global.scala类,它将负责接收所有入站请求,并将这些“未定义”的请求转换为UTF-8,这将确保所有请求在进入相应的模块之前都得到了正确的处理。

代码语言:javascript
运行
复制
    import play.*;

    public class Global extends GlobalSettings {

    @Override
    public Action onRequest(Request request, Method actionMethod) {

       return super.onRequest(request, actionMethod);
    }
}

在这个“filter”方法中,现在缺少查询请求是PUT还是POST并且没有定义字符编码的代码段,并将此请求的正文从ISO-8859-1转换为UTF-8,否则它将把请求的正文从任何字符集转换为UTF-8。

Apache Tomcat通过过滤器解决了这个问题:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q3

我在Netty中没有发现任何与Tomcat相似的特性,只有这个全局拦截器在运行!关卡。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-01 18:53:29

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

该主体的类型为RequestBody,它有一个返回Http.RawBufferasRaw()方法。

在那里,您可以获取正文的byte[],并根据需要对其进行处理。例如,String允许您从指示字符集的byte[]创建字符串(请参阅documentation),并且由于您可以从请求中的头部获取charset,因此您可以创建正确的字符串。

编辑:

在对注释的回答中,要应用这一点,您可能希望使用BodyParser而不是Global

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17281643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档