对于简短的JSON字符串,如果指定了Content-Length
标头,则内容将被截断并错过最后几个字符。有没有办法解决这个问题:
简单的最小例子:
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
标头始终返回整个JSON字符串,Content-Length
标头是整个JSON字符串的长度(即长于截断内容的长度但等于{的长度{1}}标题)。
如果注释掉设置actual-value
标题的行,则返回完整的JSON字符串。
如何让Content-Length
标题不截断内容?
[注意:目前正在运行Apache 2.2,ColdFusion 11,0,03,292866和Oracle JVM 1.8.0_25(虽然我现在正在升级Apache并将最新的修补程序应用于ColdFusion) ]