gpt4 book ai didi

json - 如何停止 Content-Length header 截断 REST 服务中的短 JSON 片段

转载 作者:行者123 更新时间:2023-12-05 08:09:37 24 4
gpt4 key购买 nike

对于短 JSON 字符串,如果指定了 Content-Length header ,则内容将被截断并遗漏最后几个字符。有没有办法解决这个问题:

简单的最小示例:

component restpath="test" rest = true {
remote void function test(
numeric len restargsource = "Path"
)
httpmethod = "GET"
restpath = "{len}"
produces = "application/json"
{
var value = {};
var sb = CreateObject( "java", "java.lang.StringBuffer" );
for ( var i = 0; i < len; i++ )
sb.append( 'a' );
value[ sb.toString() ] = 1;

var json = SerializeJSON( value );

restSetResponse(
{
"status" = 200,
"content" = json,
"headers" = {
"Content-Length" = Len( json.getBytes( 'UTF-8' ) ),
"actual-value" = json
}
}
);
}
}

尝试

  • /test/1/test/5则返回内容为空
  • /test/6 返回的内容是{
  • /test/7 返回的内容是{"
  • /test/8 返回的内容是{"a
  • /test/9 返回的内容是{"aaaaaaaaa
  • /test/10返回的内容是{"aaaaaaaaaa"
  • /test/11返回的内容是{"aaaaaaaaaaa":
  • /test/12 返回的内容是{"aaaaaaaaaaaa":1
  • /test/13 返回的内容是 {"aaaaaaaaaaaaa":1} - 终于是一个正确的值!

actual-value header 始终返回整个 JSON 字符串,而 Content-Length header 是整个 JSON 字符串的长度(即长于截断的内容但等于 actual-value header 的长度)。

如果设置 Content-Length header 的行被注释掉,则返回完整的 JSON 字符串。

如何让 Content-Length header 不截断内容?

[注意:目前正在运行 Apache 2.2、ColdFusion 11,0,03,292866 和 Oracle JVM 1.8.0_25(尽管我现在正在升级 Apache 并将最新的修补程序应用到 ColdFusion)]

最佳答案

尝试设置以下响应头:

"headers" = {
"Content-Type" = "content-type: application/json; charset=UTF-8"
"Content-Length" = Len(json)
}

关于json - 如何停止 Content-Length header 截断 REST 服务中的短 JSON 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34090435/

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