Lumen 5.7 JSON 响应限制

Posted

技术标签:

【中文标题】Lumen 5.7 JSON 响应限制【英文标题】:Lumen 5.7 JSON response limit 【发布时间】:2019-05-01 19:14:54 【问题描述】:

我的数据库中存储了一大段文本,可以成功地从我的DBdd()log::debug() 内容中提取它,没有任何问题。文字可以看这里:https://pastebin.com/KQNYW623

当我尝试返回文本的 JSON 响应时,问题就来了。在 api.php 路由文件中安装一个干净的 Lumen 5.7,我有这个路由:

$router->get('/', function () use ($router) return json_encode("*insert large content here*"); //this is where the big text goes, I won't paste it fully here but it's here in my code as a string );

如果我访问这条路线,我会得到一个空白页面。在我的屏幕、邮递员或curl 中绝对没有出现任何内容。错误日志中没有错误,什么都没有。只是空白。

如果我放置比大文本小得多的其他内容(例如 hello world),我在输出响应时没有问题。有人可以阐明这个问题的根本原因是什么吗? Lumen/Laravel 中的响应是否有字符限制?

--- 更新 ---

因此,如果我这样做echo response()->json($string)(其中$string)是一个保存长文本的变量)我可以看到字符串已被编码为 JSON,并且已添加响应标头,所有这些都输出到屏幕上。但是,执行return response()->json($string) 仍然会继续返回空白响应。

有人知道为什么return 没有从response() 发回数据吗?

【问题讨论】:

这并不完全是巨大的......而且我认为我没有遇到过问题,也没有看到有人遇到 Lumen 无法处理大型 json 数据的问题。不过我可能弄错了。 由于您提供的链接只是一个巨大的字符串,如果您不json_encode它但仍​​然返回它会发生什么? 你为什么在字符串而不是数组中使用json_encode?它只会显示相同的字符串。 ^^ 确实令人费解......我想你(OP)最终可能希望将 JSON 传递给它? @FelippeDuarte 字符串是更大数组的一部分,但问题都源于将字符串包含在数组中并尝试将该数组作为 JSON 响应返回。如果我从数组中删除大字符串,它将返回 JSON 响应正常 【参考方案1】:

要返回一个像 laravel 这样的带有 lumen 的 json 响应,我想你可以看看:

https://lumen.laravel.com/docs/5.7/responses

json 方法会自动将 Content-Type 标头设置为 application/json,并使用 json_encode 将给定数组转换为 JSON

此外,如果您有一个与您的数据库关联的模型,您可以自动将您的 json 转换为数组,请参阅:

如果您的数据库具有包含序列化 JSON 的 JSON 或 TEXT 字段类型,则将数组转换添加到该属性将自动将该属性反序列化为 PHP 数组

https://laravel.com/docs/5.7/eloquent-mutators#array-and-json-casting

【讨论】:

是的,我已经这样做了。问题是当return response()->json($model); 字符串是$model 数组的一部分时,响应为空白。问题是数据库中的大字符串并试图将模型输出为 JSON 响应 @Caleuanhopkins 但如果您使用dd 记录您的数据,json 会出现吗? 通过 Eloquent 直接从数据库中获取,是的。 您通过 Eloquent 获取的数据来自什么数据类型? @Caleuanhopkins 我已经阅读了多个主题,这可能是 Apache 或 php 的问题尝试增加响应最大大小【参考方案2】:

修复了问题:我从这里提取的一个 CORS 中间件类:enter link description here

Content-Length > 6K 的响应被处理为长度为 0,但仍返回 200 响应。感谢大家的帮助和建议。

【讨论】:

以上是关于Lumen 5.7 JSON 响应限制的主要内容,如果未能解决你的问题,请参考以下文章

Lumen 确实发送 204 响应

如何在 Laravel/Lumen 中捕获 401 响应?

如何在 Laravel Lumen 8 中设置响应的 cookie

如何将自定义方法添加到 Lumen 的响应类

Laravel json 响应:response()->json() 或 $var->toJson()

将 Json 响应结果限制在 php 中的前 5 位