function EntityResource::deserialize
Deserializes a request body, if any.
Parameters
\Drupal\jsonapi\ResourceType\ResourceType $resource_type: The JSON:API resource type for the current request.
\Symfony\Component\HttpFoundation\Request $request: The request object.
string $class: The class into which the request data needs to be deserialized.
string $relationship_field_name: The public relationship field name of the data to be deserialized if the incoming request is for a relationship update. Not required for non- relationship requests.
Return value
array An object normalization.
Throws
\Symfony\Component\HttpKernel\Exception\BadRequestHttpException Thrown if the request body cannot be decoded, or when no request body was provided with a POST or PATCH request.
\Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException Thrown if the request body cannot be denormalized.
5 calls to EntityResource::deserialize()
- EntityResource::addToRelationshipData in core/
modules/ jsonapi/ src/ Controller/ EntityResource.php  - Adds a relationship to a to-many relationship.
 - EntityResource::createIndividual in core/
modules/ jsonapi/ src/ Controller/ EntityResource.php  - Creates an individual entity.
 - EntityResource::patchIndividual in core/
modules/ jsonapi/ src/ Controller/ EntityResource.php  - Patches an individual entity.
 - EntityResource::removeFromRelationshipData in core/
modules/ jsonapi/ src/ Controller/ EntityResource.php  - Deletes the relationship of an entity.
 - EntityResource::replaceRelationshipData in core/
modules/ jsonapi/ src/ Controller/ EntityResource.php  - Updates the relationship of an entity.
 
File
- 
              core/
modules/ jsonapi/ src/ Controller/ EntityResource.php, line 807  
Class
- EntityResource
 - Process all entity requests.
 
Namespace
Drupal\jsonapi\ControllerCode
protected function deserialize(ResourceType $resource_type, Request $request, $class, $relationship_field_name = NULL) {
  assert($class === JsonApiDocumentTopLevel::class || $class === ResourceIdentifier::class && !empty($relationship_field_name) && is_string($relationship_field_name));
  $received = (string) $request->getContent();
  if (!$received) {
    assert($request->isMethod('POST') || $request->isMethod('PATCH') || $request->isMethod('DELETE'));
    if ($request->isMethod('DELETE') && $relationship_field_name) {
      throw new BadRequestHttpException(sprintf('You need to provide a body for DELETE operations on a relationship (%s).', $relationship_field_name));
    }
    else {
      throw new BadRequestHttpException('Empty request body.');
    }
  }
  // First decode the request data. We can then determine if the serialized
  // data was malformed.
  try {
    $decoded = $this->serializer
      ->decode($received, 'api_json');
  } catch (UnexpectedValueException $e) {
    // If an exception was thrown at this stage, there was a problem decoding
    // the data. Throw a 400 HTTP exception.
    throw new BadRequestHttpException($e->getMessage());
  }
  try {
    $context = [
      'resource_type' => $resource_type,
    ];
    if ($relationship_field_name) {
      $context['related'] = $resource_type->getInternalName($relationship_field_name);
    }
    return $this->serializer
      ->denormalize($decoded, $class, 'api_json', $context);
  } catch (UnexpectedValueException $e) {
    throw new UnprocessableEntityHttpException($e->getMessage());
  } catch (InvalidArgumentException $e) {
    throw new UnprocessableEntityHttpException($e->getMessage());
  }
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.