Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将所有入站请求转换为UTF-8!框架_Java_Scala_Playframework_Netty - Fatal编程技术网

Java 如何将所有入站请求转换为UTF-8!框架

Java 如何将所有入站请求转换为UTF-8!框架,java,scala,playframework,netty,Java,Scala,Playframework,Netty,由于向后兼容性,默认情况下,所有未定义字符集的HTTP请求都转换为ISO-8859-1。我们的内蒂发球!应用程序正确地接收带有JSON主体的PUT请求,前提是这些请求已定义了字符集。如果没有,这些请求应该以某种方式转换为UTF-8,最好是在全局应用程序级别 因此,我创建了一个Global.scala类,负责接收所有入站数据 请求,并将这些“未定义”转换为UTF-8,这将确保在进入相应模块之前,所有请求都得到正确处理 import play.*; public class Glo

由于向后兼容性,默认情况下,所有未定义字符集的HTTP请求都转换为ISO-8859-1。我们的内蒂发球!应用程序正确地接收带有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);
    }
}
在这个“filter”方法中,现在有一个缺失的代码段,它将查询请求是否是PUT或POST,并且没有定义字符编码,并将此请求的正文从ISO-8859-1转换为UTF-8,否则它将从其所在的任何字符集将请求的正文转换为UTF-8

Apache Tomcat通过以下过滤器解决了此问题:


我在Netty中没有发现任何类似于Tomcat的功能,只有这个全局拦截器在使用!水平

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

类型为
RequestBody
的主体具有一个
asRaw()
方法,该方法返回一个

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

编辑:


在回答评论时,若要应用这一点,您可能希望使用a而不是
全局

,那么问题是什么?如何将请求中的内容转换为UTF-8,然后再将其传递到其预期位置…我认为这不受直接支持,您需要修改播放本身,例如,可以向Http.RequestBody添加一个getter。但是我不明白如何神奇地将“undefined”转换为UTF-8,在某种程度上,您需要知道您的输入是什么,或者通过信任标头,或者隐式地(您知道您的遗留代码总是以特定的编码或类似的方式发送)。好的,如何将这些重新解析的数据返回到请求中,以便此请求要结束的端点将获得具有适当转换数据的请求。请求是不可变的,因此我在以透明方式执行时遇到了问题