I had a custom REST API working with Drupal 8 perfectly. After upgrading to Drupal 9.2.X, the *Patch* and *Post* methods of this custom REST API stopped working. Now they throw the following exception.

> RuntimeException: Callable "Drupal\my_module\Plugin\rest\resource\UpdateBoxes::patch" requires a value for the "$payload" argument. in Drupal\Component\Utility\ArgumentsResolver->handleUnresolvedArgument() (line 143 of /var/www/docroot/core/lib/Drupal/Component/Utility/ArgumentsResolver.php).

The code I am using is the following one.

```php
namespace Drupal\my_module\Plugin\rest\resource;

use Drupal\rest\ModifiedResourceResponse;

/**
 * Provides a resource to get view modes by entity and bundle.
 *
 * @RestResource(
 *   id = "update_boxes",
 *   label = @Translation("Update boxes"),
 *   uri_paths = {
 *     "canonical" = "/api/container/{container_id}/{type}/{product_id}/boxes"
 *   }
 * )
 */
class UpdateBoxes extends ResourceBase {

  /**
   * A current user instance.
   *
   * @var \Drupal\Core\Session\AccountProxyInterface
   */
  protected $currentUser;

  protected $boxesHandler;

  protected $event_dispacher;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->currentUser = $container->get('current_user');
    $instance->boxesHandler = $container->get('boxes.handler');
    $instance->event_dispacher = $container->get('event_dispatcher');

    return $instance;
  }

  /**
   * Responds to PATCH requests.
   *
   * @param $container_id
   * @param $type
   * @param $product_id
   * @param $payload
   * @return \Drupal\rest\ModifiedResourceResponse
   *   The HTTP response object.
   */
    public function patch($container_id = null, $type = null, $product_id = null, $payload) {
      //My code here.
     
    }

}
```

In `patch()` I could read `$payload` and see the array sent in the request, but after upgrading the site, `$payload` is `NULL`.

The solution I found was changing the last argument of `patch()` and extract the payload from the `$request` object.

```php
public function patch($container_id = null, $type = null, $product_id = null, Request $request) {
  // …
  $payload = json_decode($request->getContent(), TRUE);
}
```

I couldn't find any documentation about this change; I am not sure it was a good practice or the better implementation to get the payload working.