gpt4 book ai didi

java - Tomcat 中奇怪的 JSON 字符串失真

转载 作者:行者123 更新时间:2023-11-28 23:58:18 24 4
gpt4 key购买 nike

请向我解释一下,从 JavaFX 应用程序发送到 Tomcat 服务器的 JSON 字符串失真的原因是什么。部分符号被奇怪的方 block 符号代替:

screenshot-1 of JSON-String printed to console

与 JSON 的对话正确传递——我通过在序列化后将 JSON 字符串打印到 JavaFX 应用程序中的控制台来检查它。但是在通过 DoPost 方法传输到 Tomcat-server 之后,JSON-String 被扭曲了。我也尝试传输 XML——它以同样的方式扭曲。

经过小规模调查后,我得到了一些结果:如果 DoPost 发送的字符串长度不超过 7782 个符号,则它保持正确。加上一个符号——然后出现方 block :

screenshot-2 of JSON-Strings printed to console

JavaFX 应用程序和 Tomcat 服务器都在 Intellij IDEA 下在本地计算机上启动,因此这不是网络问题。

最佳答案

非常感谢 ru.stackoverflow.com 上的用户 Nick: https://ru.stackoverflow.com/users/216863/nick

他给出了确切的原因——inputStream 的长度。 GZIP 为 Servlet 提供了不正确的 inputStream 长度值。当我替换这段代码时:`public String getInputString(HttpServletRequest req) { 字符串 receivedString = "";

    int len = req.getContentLength();
byte[] input = new byte[len];

try {
ServletInputStream sin = req.getInputStream();
int c = 0;
int count = 0;
while ((c = sin.read(input, count, (input.length - count))) > 0) {
count += 1;
}
sin.close();
} catch (IOException e) {

}

receivedString = new String(input);

return receivedString;
}`[PasteBin-1][1]

通过这个:`public String getInputString(HttpServletRequest req) { 字符串 receivedString = "";

    try (BufferedReader reader = new BufferedReader(new InputStreamReader(req.getInputStream()))) {
StringBuilder sb = new StringBuilder("");

while (reader.ready()) {
sb.append(reader.readLine());
}

if (sb.length() > 0) {
receivedString = sb.toString();
}

} catch (IOException e) {

}

return receivedString;
}`[PasteBin-2][2]

一切开始正常工作。

这是关于俄语的同一个问题线程: answer on ru.stackoverflow.com

关于java - Tomcat 中奇怪的 JSON 字符串失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55237673/

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