gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:36:25 26 4
gpt4 key购买 nike

由于向后兼容性,所有未定义字符集的 HTTP 请求默认都会转换为 ISO-8859-1。我们的 Netty 服务 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拦截器!等级。

最佳答案

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

RequestBody 类型的主体有一个 asRaw() 方法,该方法返回 Http.RawBuffer .

从那里您可以获得主体的 byte[] 并根据需要对其进行处理。例如,String 允许您从指示字符集的 byte[] 创建字符串(请参阅 documentation ),并且您可以从以下 header 获取 charset请求,然后您可以创建正确的字符串。

编辑:

在回答评论时,要应用此功能,您可能需要使用 BodyParser而不是 Global

关于java - 如何在 Play 中将所有入站请求转换为 UTF-8!框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17281643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com