12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <?php
- /**
- * JSON deserializer of REST request content.
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Webapi\Rest\Request\Deserializer;
- use Magento\Framework\App\State;
- use Magento\Framework\Phrase;
- class Json implements \Magento\Framework\Webapi\Rest\Request\DeserializerInterface
- {
- /**
- * @var \Magento\Framework\Json\Decoder
- * @deprecated 101.0.0
- */
- protected $decoder;
- /**
- * @var State
- */
- protected $_appState;
- /**
- * @var \Magento\Framework\Serialize\Serializer\Json
- */
- private $serializer;
- /**
- * @param \Magento\Framework\Json\Decoder $decoder
- * @param State $appState
- * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer
- * @throws \RuntimeException
- */
- public function __construct(
- \Magento\Framework\Json\Decoder $decoder,
- State $appState,
- \Magento\Framework\Serialize\Serializer\Json $serializer = null
- ) {
- $this->decoder = $decoder;
- $this->_appState = $appState;
- $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()
- ->get(\Magento\Framework\Serialize\Serializer\Json::class);
- }
- /**
- * Parse Request body into array of params.
- *
- * @param string $encodedBody Posted content from request.
- * @return array|null Return NULL if content is invalid.
- * @throws \InvalidArgumentException
- * @throws \Magento\Framework\Webapi\Exception If decoding error was encountered.
- */
- public function deserialize($encodedBody)
- {
- if (!is_string($encodedBody)) {
- throw new \InvalidArgumentException(
- sprintf('"%s" data type is invalid. String is expected.', gettype($encodedBody))
- );
- }
- try {
- $decodedBody = $this->serializer->unserialize($encodedBody);
- } catch (\InvalidArgumentException $e) {
- if ($this->_appState->getMode() !== State::MODE_DEVELOPER) {
- throw new \Magento\Framework\Webapi\Exception(new Phrase('Decoding error.'));
- } else {
- throw new \Magento\Framework\Webapi\Exception(
- new Phrase(
- 'Decoding error: %1%2%3%4',
- [PHP_EOL, $e->getMessage(), PHP_EOL, $e->getTraceAsString()]
- )
- );
- }
- }
- return $decodedBody;
- }
- }
|