Hi Team,

I have tried to create a custom post rest resource.

When I tried to request with postman but I am getting below error.

RuntimeException: Callable "Drupal\custom_resource\Plugin\rest\resource\CustomPrr::post" requires a value for the "$node_type" argument. in Drupal\Component\Utility\ArgumentsResolver->handleUnresolvedArgument() (line 143 of /var/www/html/web/core/lib/Drupal/Component/Utility/ArgumentsResolver.php).

Details:- 

<?php

namespace Drupal\custom_resource\Plugin\rest\resource;

use Drupal\Core\Session\AccountProxyInterface;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Psr\Log\LoggerInterface;

/**
 * Provides a resource to get view modes by entity and bundle.
 *
 * @RestResource(
 *   id = "custom_prr",
 *   label = @Translation("Custom prr"),
 *   serialization_class = "Drupal\node\Entity\Node",
 *   uri_paths = {
 *     "create" = "/api/custom/prr",
 *     "https://www.drupal.org/link-relations/create" = "/api/custom/prr"
 *   }
 * )
 */
class CustomPrr extends ResourceBase {

  /**
   * A current user instance.
   *
   * @var \Drupal\Core\Session\AccountProxyInterface
   */
  protected $currentUser;
  /**
   * Constructs a Drupal\rest\Plugin\ResourceBase object.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param array $serializer_formats
   *   The available serialization formats.
   * @param \Psr\Log\LoggerInterface $logger
   *   A logger instance.
   * @param \Drupal\Core\Session\AccountProxyInterface $current_user
   *   A current user instance.
   */

  public function __construct(
    array $configuration,
    $plugin_id,
    $plugin_definition,
    array $serializer_formats,
    LoggerInterface $logger,
    AccountProxyInterface $current_user) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);

    $this->currentUser = $current_user;
  }

  /**
   * {@inheritdoc}
   */
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->getParameter('serializer.formats'),
      $container->get('logger.factory')->get('custom_resource'),
      $container->get('current_user')
    );
  }

      /**
   * Responds to POST requests.
   *
   * Returns a list of bundles for specified entity.
   *
   * @param $node_type
   * @param $data
   * @return \Drupal\rest\ResourceResponse Throws exception expected.
   * Throws exception expected.
   */
  public function post($node_type, $data) {

    // You must to implement the logic of your REST Resource here.
    // Use current user after pass authentication to validate access.
    if (!$this->currentUser->hasPermission('access content')) {
      throw new AccessDeniedHttpException();
    }

    $node = Node::create(
      array(
        'type' => $node_type,
        'title' => $data->title->value,
        'body' => [
          'summary' => '',
          'value' => $data->body->value,
          'format' => 'full_html',
        ],
      )
    );
    $node->save();
    return new ResourceResponse($node);
  }
}

Body:

{
    "type": [
        {
            "target_id": "article"
        }
    ],
    "title": [
        {
            "value": "test@test2.fr"
        }
    ],
    "body": [
        {
            "value": "testpassword"
        }
    ]
}

Can Anyone help me with how we can fix?