问题描述
我在通过 Postman 和 curl 向 /api/products
和 /api/categories
发出经过身份验证的 GET 请求时遇到 500 错误。 API 请求是:
curl -X GET \
'http://HOST-IP/api/products?page[number]=1&page[size]=10&sort=id' \
-H 'Accept: application/vnd.api+json' \
-H 'Authorization: Bearer XXX' \
-H 'Content-Type: application/vnd.api+json'
从 prod.log 中,/api/products
的输出是:
api.ERROR: The execution of "oro_api.load_entities_by_entity_serializer" processor is Failed.
{"exception":"[object] (ErrorException(code: 0): Call to a member function getId() on null
at /var/www/html/commerce/vendor/oro/commerce/src/Oro/Bundle/RedirectBundle/Api/Processor/ComputeUrlFields.PHP:83)","action":"get_list","requestType":"rest,json_api,frontend","version":"latest","class":"Oro\\Bundle\\ProductBundle\\Entity\\Product"} []
检查 ComputeUrlFields.PHP
的第 83 行,引用了 LocalizationHelper
,它存在于:/var/www/html/commerce/vendor/oro/platform/src/Oro/Bundle/LocaleBundle/Helper
这些 API 通过沙盒成功运行。此外,我还可以发出其他经过身份验证的 API 请求,例如 GET /api/productimages
和 /api/productfamilies
。对失败有什么想法吗?我没有更改 AWS Marketplace 映像中的任何捆绑包。
电子商务版本:4.2.1
解决方法
您的环境或管理设置似乎有问题。
我们尝试在干净的 AWS 实例上重现问题,但没有成功。 另外,请注意,没有“/api/categories”资源,但有“/api/mastercatalogcategories”可以与您的重现步骤没有问题,与“/api/products”相同。
根据堆栈跟踪,本地化检测或默认本地化配置有问题。见https://doc.oroinc.com/user/back-office/system/configuration/system/general-setup/global-localization/。
我建议使用 xDebug 来查找根本原因,或者作为一种解决方法,您可以使用 X-Localization-ID
标头显式设置本地化。