diff --git a/jsonapi.services.yml b/jsonapi.services.yml
index 3327db1..cac991e 100644
--- a/jsonapi.services.yml
+++ b/jsonapi.services.yml
@@ -73,7 +73,7 @@ services:
       - { name: jsonapi_normalizer_do_not_use_removal_imminent }
   serializer.normalizer.jsonapi_document_toplevel.jsonapi:
     class: Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer
-    arguments: ['@jsonapi.link_manager', '@jsonapi.current_context', '@entity_type.manager', '@jsonapi.resource_type.repository', '@jsonapi.field_resolver']
+    arguments: ['@jsonapi.link_manager', '@entity_type.manager', '@jsonapi.resource_type.repository', '@jsonapi.field_resolver']
     tags:
       - { name: jsonapi_normalizer_do_not_use_removal_imminent }
   serializer.normalizer.entity_reference_field.jsonapi:
@@ -101,12 +101,9 @@ services:
   jsonapi.link_manager:
     class: Drupal\jsonapi\LinkManager\LinkManager
     arguments: ['@router.no_access_checks', '@url_generator']
-  jsonapi.current_context:
-    class: Drupal\jsonapi\Context\CurrentContext
-    arguments: ['@jsonapi.resource_type.repository', '@request_stack', '@current_route_match']
   jsonapi.field_resolver:
     class: Drupal\jsonapi\Context\FieldResolver
-    arguments: ['@jsonapi.current_context', '@entity_type.manager', '@entity_field.manager', '@entity_type.bundle.info', '@jsonapi.resource_type.repository']
+    arguments: ['@entity_type.manager', '@entity_field.manager', '@entity_type.bundle.info', '@jsonapi.resource_type.repository']
   access_check.jsonapi.custom_query_parameter_names:
     class: Drupal\jsonapi\Access\CustomQueryParameterNamesAccessCheck
     tags:
@@ -117,6 +114,11 @@ services:
       # Priority 10, to ensure it runs before @paramconverter.entity.
       - { name: paramconverter, priority: 10 }
     arguments: ['@entity.manager']
+  paramconverter.jsonapi.resource_type:
+    class: Drupal\jsonapi\ParamConverter\ResourceTypeConverter
+    arguments: ['@jsonapi.resource_type.repository']
+    tags:
+      - { name: paramconverter }
   jsonapi.exception_subscriber:
     class: Drupal\jsonapi\EventSubscriber\DefaultExceptionSubscriber
     tags:
diff --git a/src/Context/CurrentContext.php b/src/Context/CurrentContext.php
deleted file mode 100644
index a75410d..0000000
--- a/src/Context/CurrentContext.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-namespace Drupal\jsonapi\Context;
-
-use Drupal\Core\Routing\RouteMatchInterface;
-use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface;
-use Symfony\Component\HttpFoundation\RequestStack;
-
-/**
- * Service for accessing information about the current JSON API request.
- *
- * @internal
- */
-class CurrentContext {
-
-  /**
-   * The JSON API resource type repository.
-   *
-   * @var \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface
-   */
-  protected $resourceTypeRepository;
-
-  /**
-   * The current JSON API resource type.
-   *
-   * @var \Drupal\jsonapi\ResourceType\ResourceType
-   */
-  protected $resourceType;
-
-  /**
-   * The current request.
-   *
-   * @var \Symfony\Component\HttpFoundation\RequestStack
-   */
-  protected $requestStack;
-
-  /**
-   * The current route match.
-   *
-   * @var \Drupal\Core\Routing\RouteMatchInterface
-   */
-  protected $routeMatch;
-
-  /**
-   * Creates a CurrentContext object.
-   *
-   * @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository
-   *   The resource type repository.
-   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
-   *   The request stack.
-   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
-   *   The current route match.
-   */
-  public function __construct(ResourceTypeRepositoryInterface $resource_type_repository, RequestStack $request_stack, RouteMatchInterface $route_match) {
-    $this->resourceTypeRepository = $resource_type_repository;
-    $this->requestStack = $request_stack;
-    $this->routeMatch = $route_match;
-  }
-
-  /**
-   * Gets the JSON API resource type for the current request.
-   *
-   * @return \Drupal\jsonapi\ResourceType\ResourceType
-   *   The JSON API resource type for the current request.
-   */
-  public function getResourceType() {
-    if (!isset($this->resourceType)) {
-      $route = $this->routeMatch->getRouteObject();
-      $entity_type_id = $route->getRequirement('_entity_type');
-      $bundle = $route->getRequirement('_bundle');
-      $this->resourceType = $this->resourceTypeRepository
-        ->get($entity_type_id, $bundle);
-    }
-
-    return $this->resourceType;
-  }
-
-  /**
-   * Checks if the request is on a relationship.
-   *
-   * @return bool
-   *   TRUE if the request is on a relationship. FALSE otherwise.
-   */
-  public function isOnRelationship() {
-    return (bool) $this->routeMatch
-      ->getRouteObject()
-      ->getDefault('_on_relationship');
-  }
-
-  /**
-   * Get a value by key from the _json_api_params route parameter.
-   *
-   * @param string $parameter_key
-   *   The key by which to retrieve a route parameter.
-   *
-   * @return mixed
-   *   The JSON API provided parameter.
-   */
-  public function getJsonApiParameter($parameter_key) {
-    $params = $this
-      ->requestStack
-      ->getCurrentRequest()
-      ->attributes
-      ->get('_json_api_params');
-
-    return isset($params[$parameter_key]) ? $params[$parameter_key] : NULL;
-  }
-
-  /**
-   * Determines, whether the JSONAPI extension was requested.
-   *
-   * @todo Find a better place for such a JSONAPI derived information.
-   *
-   * @param string $extension_name
-   *   The extension name.
-   *
-   * @return bool
-   *   Returns TRUE, if the extension has been found.
-   */
-  public function hasExtension($extension_name) {
-    return in_array($extension_name, $this->getExtensions());
-  }
-
-  /**
-   * Returns a list of requested extensions.
-   *
-   * @return string[]
-   *   The extension names.
-   */
-  public function getExtensions() {
-    $content_type_header = $this
-      ->requestStack
-      ->getCurrentRequest()
-      ->headers
-      ->get('Content-Type');
-    if (preg_match('/ext="([^"]+)"/i', $content_type_header, $match)) {
-      $extensions = array_map('trim', explode(',', $match[1]));
-      return $extensions;
-    }
-    return [];
-  }
-
-  /**
-   * Reset the internal caches.
-   */
-  public function reset() {
-    unset($this->resourceType);
-  }
-
-}
diff --git a/src/Context/FieldResolver.php b/src/Context/FieldResolver.php
index 14bdc4d..4975481 100644
--- a/src/Context/FieldResolver.php
+++ b/src/Context/FieldResolver.php
@@ -19,13 +19,6 @@ use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  */
 class FieldResolver {
 
-  /**
-   * The entity type id.
-   *
-   * @var \Drupal\jsonapi\Context\CurrentContext
-   */
-  protected $currentContext;
-
   /**
    * The entity type manager.
    *
@@ -57,8 +50,6 @@ class FieldResolver {
   /**
    * Creates a FieldResolver instance.
    *
-   * @param \Drupal\jsonapi\Context\CurrentContext $current_context
-   *   The JSON API CurrentContext service.
    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
    *   The entity type manager.
    * @param \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager
@@ -68,31 +59,13 @@ class FieldResolver {
    * @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository
    *   The resource type repository.
    */
-  public function __construct(CurrentContext $current_context, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info, ResourceTypeRepositoryInterface $resource_type_repository) {
-    $this->currentContext = $current_context;
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info, ResourceTypeRepositoryInterface $resource_type_repository) {
     $this->entityTypeManager = $entity_type_manager;
     $this->fieldManager = $field_manager;
     $this->entityTypeBundleInfo = $entity_type_bundle_info;
     $this->resourceTypeRepository = $resource_type_repository;
   }
 
-  /**
-   * Maps a Drupal field name to a public field name.
-   *
-   * Example:
-   *   'field_author.entity.field_first_name' -> 'author.firstName'.
-   *
-   * @param string $internal_field_name
-   *   The Drupal field name to map to a public field name.
-   *
-   * @return string
-   *   The mapped field name.
-   */
-  public function resolveExternal($internal_field_name) {
-    $resource_type = $this->currentContext->getResourceType();
-    return $resource_type->getPublicName($internal_field_name);
-  }
-
   /**
    * Resolves external field expressions into internal field expressions.
    *
diff --git a/src/Controller/EntityResource.php b/src/Controller/EntityResource.php
index 294c03f..6b81f6f 100644
--- a/src/Controller/EntityResource.php
+++ b/src/Controller/EntityResource.php
@@ -15,7 +15,6 @@ use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
 use Drupal\Core\Field\FieldTypePluginManagerInterface;
 use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
-use Drupal\jsonapi\Context\CurrentContext;
 use Drupal\jsonapi\Exception\EntityAccessDeniedHttpException;
 use Drupal\jsonapi\Exception\UnprocessableHttpEntityException;
 use Drupal\jsonapi\Query\Filter;
@@ -63,13 +62,6 @@ class EntityResource {
    */
   protected $fieldManager;
 
-  /**
-   * The current context service.
-   *
-   * @var \Drupal\jsonapi\Context\CurrentContext
-   */
-  protected $currentContext;
-
   /**
    * The current context service.
    *
@@ -100,8 +92,6 @@ class EntityResource {
    *   The entity type manager.
    * @param \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager
    *   The entity type field manager.
-   * @param \Drupal\jsonapi\Context\CurrentContext $current_context
-   *   The current context.
    * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $plugin_manager
    *   The plugin manager for fields.
    * @param \Drupal\jsonapi\LinkManager\LinkManager $link_manager
@@ -109,11 +99,10 @@ class EntityResource {
    * @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository
    *   The link manager service.
    */
-  public function __construct(ResourceType $resource_type, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, CurrentContext $current_context, FieldTypePluginManagerInterface $plugin_manager, LinkManager $link_manager, ResourceTypeRepositoryInterface $resource_type_repository) {
+  public function __construct(ResourceType $resource_type, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, FieldTypePluginManagerInterface $plugin_manager, LinkManager $link_manager, ResourceTypeRepositoryInterface $resource_type_repository) {
     $this->resourceType = $resource_type;
     $this->entityTypeManager = $entity_type_manager;
     $this->fieldManager = $field_manager;
-    $this->currentContext = $current_context;
     $this->pluginManager = $plugin_manager;
     $this->linkManager = $link_manager;
     $this->resourceTypeRepository = $resource_type_repository;
diff --git a/src/Controller/RequestHandler.php b/src/Controller/RequestHandler.php
index d0e301a..b218fb9 100644
--- a/src/Controller/RequestHandler.php
+++ b/src/Controller/RequestHandler.php
@@ -4,15 +4,13 @@ namespace Drupal\jsonapi\Controller;
 
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Render\RenderContext;
-use Drupal\Core\Routing\RouteMatchInterface;
-use Drupal\jsonapi\Context\CurrentContext;
+use Drupal\jsonapi\ResourceType\ResourceType;
 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
 use Symfony\Component\DependencyInjection\ContainerAwareTrait;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
-use Symfony\Component\Routing\Route;
 use Symfony\Component\Serializer\Exception\UnexpectedValueException;
 use Symfony\Component\Serializer\SerializerInterface;
 
@@ -37,44 +35,43 @@ class RequestHandler implements ContainerAwareInterface, ContainerInjectionInter
   /**
    * Handles a web API request.
    *
-   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
-   *   The route match.
    * @param \Symfony\Component\HttpFoundation\Request $request
    *   The HTTP request object.
+   * @param \Drupal\jsonapi\ResourceType\ResourceType $resource_type
+   *   The JSON API resource type for the current request.
    *
    * @return \Drupal\Core\Cache\CacheableResponseInterface
    *   The response object.
    */
-  public function handle(RouteMatchInterface $route_match, Request $request) {
+  public function handle(Request $request, ResourceType $resource_type) {
     $method = strtolower($request->getMethod());
-    $route = $route_match->getRouteObject();
 
     // Deserialize incoming data if available.
-    /* @var \Symfony\Component\Serializer\SerializerInterface $serializer */
-    $serializer = $this->container->get('jsonapi.serializer_do_not_use_removal_imminent');
-    /* @var \Drupal\jsonapi\Context\CurrentContext $current_context */
-    $current_context = $this->container->get('jsonapi.current_context');
-    $current_context->reset();
-    $unserialized = $this->deserializeBody($request, $serializer, $route->getOption('serialization_class'), $current_context);
+    $unserialized = $this->deserializeBody(
+      $request,
+      $this->container->get('jsonapi.serializer_do_not_use_removal_imminent'),
+      $resource_type
+    );
     if ($unserialized instanceof Response && !$unserialized->isSuccessful()) {
       return $unserialized;
     }
 
     // Determine the request parameters that should be passed to the resource
     // plugin.
-    $route_parameters = $route_match->getParameters();
     $parameters = [];
 
-    // Filter out all internal parameters starting with "_".
-    foreach ($route_parameters as $key => $parameter) {
-      if ($key{0} !== '_') {
-        $parameters[] = $parameter;
-      }
+    $entity_type_id = $resource_type->getEntityTypeId();
+    if ($entity = $request->get($entity_type_id)) {
+      $parameters[$entity_type_id] = $entity;
+    }
+
+    if ($related = $request->get('related')) {
+      $parameters['related'] = $related;
     }
 
     // Invoke the operation on the resource plugin.
-    $action = $this->action($route_match, $method);
-    $resource = $this->resourceFactory($route, $current_context);
+    $action = $this->action($request, $resource_type, $method);
+    $resource = $this->resourceFactory($resource_type);
 
     // Only add the unserialized data if there is something there.
     $extra_parameters = $unserialized ? [$unserialized, $request] : [$request];
@@ -102,25 +99,22 @@ class RequestHandler implements ContainerAwareInterface, ContainerInjectionInter
    *   The request.
    * @param \Symfony\Component\Serializer\SerializerInterface $serializer
    *   The serializer for the deserialization of the input data.
-   * @param string $serialization_class
-   *   The class the input data needs to deserialize into.
-   * @param \Drupal\jsonapi\Context\CurrentContext $current_context
-   *   The current context.
+   * @param \Drupal\jsonapi\ResourceType\ResourceType $resource_type
+   *   The JSON API resource type for the current request.
    *
    * @return mixed
    *   The deserialized data or a Response object in case of error.
    */
-  public function deserializeBody(Request $request, SerializerInterface $serializer, $serialization_class, CurrentContext $current_context) {
+  public function deserializeBody(Request $request, SerializerInterface $serializer, ResourceType $resource_type) {
     $received = $request->getContent();
     if (empty($received) || $request->isMethodCacheable()) {
       return NULL;
     }
-    $resource_type = $current_context->getResourceType();
     $field_related = $resource_type->getInternalName($request->get('related'));
     try {
-      return $serializer->deserialize($received, $serialization_class, 'api_json', [
+      return $serializer->deserialize($received, $request->get('serialization_class'), 'api_json', [
         'related' => $field_related,
-        'target_entity' => $request->get($current_context->getResourceType()->getEntityTypeId()),
+        'target_entity' => $request->get($resource_type->getEntityTypeId()),
         'resource_type' => $resource_type,
       ]);
     }
@@ -135,26 +129,28 @@ class RequestHandler implements ContainerAwareInterface, ContainerInjectionInter
   /**
    * Gets the method to execute in the entity resource.
    *
-   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
-   *   The route match.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request being handled.
+   * @param \Drupal\jsonapi\ResourceType\ResourceType $resource_type
+   *   The JSON API resource type for the current request.
    * @param string $method
    *   The lowercase HTTP method.
    *
    * @return string
    *   The method to execute in the EntityResource.
    */
-  protected function action(RouteMatchInterface $route_match, $method) {
-    $on_relationship = ($route_match->getRouteObject()->getDefault('_on_relationship'));
+  protected function action(Request $request, ResourceType $resource_type, $method) {
+    $on_relationship = (bool) $request->get('_on_relationship');
     switch ($method) {
       case 'head':
       case 'get':
         if ($on_relationship) {
           return 'getRelationship';
         }
-        elseif ($route_match->getParameter('related')) {
+        elseif ($request->get('related')) {
           return 'getRelated';
         }
-        return $this->getEntity($route_match) ? 'getIndividual' : 'getCollection';
+        return $request->get($resource_type->getEntityTypeId()) ? 'getIndividual' : 'getCollection';
 
       case 'post':
         return ($on_relationship) ? 'createRelationship' : 'createIndividual';
@@ -167,32 +163,16 @@ class RequestHandler implements ContainerAwareInterface, ContainerInjectionInter
     }
   }
 
-  /**
-   * Gets the entity for the operation.
-   *
-   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
-   *   The matched route.
-   *
-   * @return \Drupal\Core\Entity\EntityInterface
-   *   The upcasted entity.
-   */
-  protected function getEntity(RouteMatchInterface $route_match) {
-    $route = $route_match->getRouteObject();
-    return $route_match->getParameter($route->getRequirement('_entity_type'));
-  }
-
   /**
    * Get the resource.
    *
-   * @param \Symfony\Component\Routing\Route $route
-   *   The matched route.
-   * @param \Drupal\jsonapi\Context\CurrentContext $current_context
-   *   The current context.
+   * @param \Drupal\jsonapi\ResourceType\ResourceType $resource_type
+   *   The JSON API resource type for the current request.
    *
    * @return \Drupal\jsonapi\Controller\EntityResource
    *   The instantiated resource.
    */
-  protected function resourceFactory(Route $route, CurrentContext $current_context) {
+  protected function resourceFactory(ResourceType $resource_type) {
     /** @var \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository */
     $resource_type_repository = $this->container->get('jsonapi.resource_type.repository');
     /* @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
@@ -204,10 +184,9 @@ class RequestHandler implements ContainerAwareInterface, ContainerInjectionInter
     /** @var \Drupal\jsonapi\LinkManager\LinkManager $link_manager */
     $link_manager = $this->container->get('jsonapi.link_manager');
     $resource = new EntityResource(
-      $resource_type_repository->get($route->getRequirement('_entity_type'), $route->getRequirement('_bundle')),
+      $resource_type,
       $entity_type_manager,
       $field_manager,
-      $current_context,
       $plugin_manager,
       $link_manager,
       $resource_type_repository
diff --git a/src/EventSubscriber/ResourceResponseSubscriber.php b/src/EventSubscriber/ResourceResponseSubscriber.php
index c5840a9..e2ddd67 100644
--- a/src/EventSubscriber/ResourceResponseSubscriber.php
+++ b/src/EventSubscriber/ResourceResponseSubscriber.php
@@ -216,6 +216,8 @@ class ResourceResponseSubscriber implements EventSubscriberInterface {
         return $serializer->serialize($data, $format, [
           'request' => $request,
           'cacheable_metadata' => $response->getCacheableMetadata(),
+          'resource_type' => $request->get('resource_type'),
+          'on_relationship' => (bool) $request->get('_on_relationship'),
         ]);
       };
       $output = $this->renderer->executeInRenderContext($context, $render_function);
diff --git a/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php b/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
index d701206..e2ee824 100644
--- a/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
+++ b/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
@@ -7,7 +7,6 @@ use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Uuid\Uuid;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
-use Drupal\jsonapi\Context\CurrentContext;
 use Drupal\jsonapi\Context\FieldResolver;
 use Drupal\jsonapi\Normalizer\Value\JsonApiDocumentTopLevelNormalizerValue;
 use Drupal\jsonapi\Resource\EntityCollection;
@@ -42,13 +41,6 @@ class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements Denorm
    */
   protected $linkManager;
 
-  /**
-   * The current JSON API request context.
-   *
-   * @var \Drupal\jsonapi\Context\CurrentContext
-   */
-  protected $currentContext;
-
   /**
    * The entity type manager.
    *
@@ -75,8 +67,6 @@ class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements Denorm
    *
    * @param \Drupal\jsonapi\LinkManager\LinkManager $link_manager
    *   The link manager to get the links.
-   * @param \Drupal\jsonapi\Context\CurrentContext $current_context
-   *   The current context.
    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
    *   The entity type manager.
    * @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository
@@ -84,9 +74,8 @@ class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements Denorm
    * @param \Drupal\jsonapi\Context\FieldResolver $field_resolver
    *   The JSON API field resolver.
    */
-  public function __construct(LinkManager $link_manager, CurrentContext $current_context, EntityTypeManagerInterface $entity_type_manager, ResourceTypeRepositoryInterface $resource_type_repository, FieldResolver $field_resolver) {
+  public function __construct(LinkManager $link_manager, EntityTypeManagerInterface $entity_type_manager, ResourceTypeRepositoryInterface $resource_type_repository, FieldResolver $field_resolver) {
     $this->linkManager = $link_manager;
-    $this->currentContext = $current_context;
     $this->entityTypeManager = $entity_type_manager;
     $this->resourceTypeRepository = $resource_type_repository;
     $this->fieldResolver = $field_resolver;
@@ -99,9 +88,6 @@ class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements Denorm
     // Validate a few common errors in document formatting.
     $this->validateRequestBody($data);
 
-    $context += [
-      'on_relationship' => $this->currentContext->isOnRelationship(),
-    ];
     $normalized = [];
 
     if (!empty($data['data']['attributes'])) {
@@ -192,9 +178,6 @@ class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements Denorm
    * {@inheritdoc}
    */
   public function normalize($object, $format = NULL, array $context = []) {
-    if (empty($context['resource_type'])) {
-      $context['resource_type'] = $this->currentContext->getResourceType();
-    }
     $value_extractor = $this->buildNormalizerValue($object->getData(), $format, $context);
     if (!empty($context['cacheable_metadata'])) {
       $context['cacheable_metadata']->addCacheableDependency($value_extractor);
diff --git a/src/ParamConverter/EntityUuidConverter.php b/src/ParamConverter/EntityUuidConverter.php
index d721df6..1f2b2cc 100644
--- a/src/ParamConverter/EntityUuidConverter.php
+++ b/src/ParamConverter/EntityUuidConverter.php
@@ -42,7 +42,10 @@ class EntityUuidConverter extends EntityConverter {
    * {@inheritdoc}
    */
   public function applies($definition, $name, Route $route) {
-    return $route->getOption('_is_jsonapi');
+    return (
+      $route->getOption('_is_jsonapi') &&
+      !empty($definition['type']) && strpos($definition['type'], 'entity') === 0
+    );
   }
 
 }
diff --git a/src/ParamConverter/ResourceTypeConverter.php b/src/ParamConverter/ResourceTypeConverter.php
new file mode 100644
index 0000000..7b18660
--- /dev/null
+++ b/src/ParamConverter/ResourceTypeConverter.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Drupal\jsonapi\ParamConverter;
+
+use Drupal\Core\ParamConverter\ParamConverterInterface;
+use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Parameter converter for upcasting JSON API resource type names to objects.
+ *
+ * @internal
+ */
+class ResourceTypeConverter implements ParamConverterInterface {
+
+  /**
+   * The JSON API resource type repository.
+   *
+   * @var \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface
+   */
+  protected $resourceTypeRepository;
+
+  /**
+   * ResourceTypeConverter constructor.
+   *
+   * @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository
+   *   The JSON API resource type repository.
+   */
+  public function __construct(ResourceTypeRepositoryInterface $resource_type_repository) {
+    $this->resourceTypeRepository = $resource_type_repository;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function convert($value, $definition, $name, array $defaults) {
+    return $this->resourceTypeRepository->getByTypeName($value);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function applies($definition, $name, Route $route) {
+    return (!empty($definition['type']) && $definition['type'] === 'jsonapi_resource_type');
+  }
+
+}
diff --git a/src/Routing/Routes.php b/src/Routing/Routes.php
index db22c8f..3fcef86 100644
--- a/src/Routing/Routes.php
+++ b/src/Routing/Routes.php
@@ -107,6 +107,7 @@ class Routes implements ContainerInjectionInterface {
 
       $defaults = [
         RouteObjectInterface::CONTROLLER_NAME => static::FRONT_CONTROLLER,
+        'resource_type' => $resource_type->getTypeName(),
       ];
       // Options that apply to all routes.
       $options = [
@@ -114,28 +115,38 @@ class Routes implements ContainerInjectionInterface {
         '_is_jsonapi' => TRUE,
       ];
 
+      $parameters = [
+        'resource_type' => [
+          'type' => 'jsonapi_resource_type',
+        ],
+      ];
+
       // Collection endpoint, like /jsonapi/file/photo.
       $route_collection = (new Route($route_base_path, $defaults))
+        ->addDefaults(['serialization_class' => JsonApiDocumentTopLevel::class])
         ->setRequirement('_entity_type', (string) $resource_type->getEntityTypeId())
         ->setRequirement('_bundle', (string) $resource_type->getBundle())
         ->setRequirement('_permission', 'access content')
         ->setRequirement('_jsonapi_custom_query_parameter_names', 'TRUE')
-        ->setOption('serialization_class', JsonApiDocumentTopLevel::class)
+        ->setOption('parameters', $parameters)
         ->setMethods(['GET', 'POST']);
       $route_collection->addOptions($options);
       $collection->add($build_route_name('collection'), $route_collection);
 
       // Individual endpoint, like /jsonapi/file/photo/123.
-      $parameters = [$resource_type->getEntityTypeId() => ['type' => 'entity:' . $resource_type->getEntityTypeId()]];
-      $route_individual = (new Route(sprintf('%s/{%s}', $route_base_path, $resource_type->getEntityTypeId())))
-        ->addDefaults($defaults)
+      $parameters = array_merge($parameters, [
+        $resource_type->getEntityTypeId() => [
+          'type' => 'entity:' . $resource_type->getEntityTypeId(),
+        ],
+      ]);
+      $route_individual = (new Route(sprintf('%s/{%s}', $route_base_path, $resource_type->getEntityTypeId()), $defaults))
+        ->addDefaults(['serialization_class' => JsonApiDocumentTopLevel::class])
         ->setRequirement('_entity_type', (string) $resource_type->getEntityTypeId())
         ->setRequirement('_bundle', (string) $resource_type->getBundle())
         ->setRequirement('_permission', 'access content')
         ->setRequirement('_jsonapi_custom_query_parameter_names', 'TRUE')
         ->setOption('parameters', $parameters)
         ->setOption('_auth', $this->authProviderList())
-        ->setOption('serialization_class', JsonApiDocumentTopLevel::class)
         ->setMethods(['GET', 'PATCH', 'DELETE']);
       $route_individual->addOptions($options);
       $collection->add($build_route_name('individual'), $route_individual);
@@ -154,13 +165,13 @@ class Routes implements ContainerInjectionInterface {
 
       // Related endpoint, like /jsonapi/file/photo/123/relationships/comments.
       $route_relationship = (new Route(sprintf('%s/{%s}/relationships/{related}', $route_base_path, $resource_type->getEntityTypeId()), $defaults + ['_on_relationship' => TRUE]))
+        ->addDefaults(['serialization_class' => EntityReferenceFieldItemList::class])
         ->setRequirement('_entity_type', (string) $resource_type->getEntityTypeId())
         ->setRequirement('_bundle', (string) $resource_type->getBundle())
         ->setRequirement('_permission', 'access content')
         ->setRequirement('_jsonapi_custom_query_parameter_names', 'TRUE')
         ->setOption('parameters', $parameters)
         ->setOption('_auth', $this->authProviderList())
-        ->setOption('serialization_class', EntityReferenceFieldItemList::class)
         ->setMethods(['GET', 'POST', 'PATCH', 'DELETE']);
       $route_relationship->addOptions($options);
       $collection->add($build_route_name('relationship'), $route_relationship);
diff --git a/tests/src/Kernel/Controller/EntityResourceTest.php b/tests/src/Kernel/Controller/EntityResourceTest.php
index c5cdc1f..1eb2457 100644
--- a/tests/src/Kernel/Controller/EntityResourceTest.php
+++ b/tests/src/Kernel/Controller/EntityResourceTest.php
@@ -5,9 +5,7 @@ namespace Drupal\Tests\jsonapi\Kernel\Controller;
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\Core\Routing\CurrentRouteMatch;
 use Drupal\jsonapi\ResourceType\ResourceType;
-use Drupal\jsonapi\Context\CurrentContext;
 use Drupal\jsonapi\Controller\EntityResource;
 use Drupal\jsonapi\Resource\EntityCollection;
 use Drupal\jsonapi\Resource\JsonApiDocumentTopLevel;
@@ -232,19 +230,11 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     ]);
     $request_stack = new RequestStack();
     $request_stack->push($request);
-    // Get the entity resource.
-    $current_context = new CurrentContext(
-      $this->container->get('jsonapi.resource_type.repository'),
-      $request_stack,
-      new CurrentRouteMatch($request_stack)
-    );
-    $this->container->set('jsonapi.current_context', $current_context);
 
     $entity_resource = new EntityResource(
       $this->container->get('jsonapi.resource_type.repository')->get('node_type', 'node_type'),
       $this->container->get('entity_type.manager'),
       $field_manager,
-      $current_context,
       $this->container->get('plugin.manager.field.field_type'),
       $this->container->get('jsonapi.link_manager'),
       $this->container->get('jsonapi.resource_type.repository')
@@ -286,19 +276,11 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     ]);
     $request_stack = new RequestStack();
     $request_stack->push($request);
-    // Get the entity resource.
-    $current_context = new CurrentContext(
-      $this->container->get('jsonapi.resource_type.repository'),
-      $request_stack,
-      new CurrentRouteMatch($request_stack)
-    );
-    $this->container->set('jsonapi.current_context', $current_context);
 
     $entity_resource = new EntityResource(
       $this->container->get('jsonapi.resource_type.repository')->get('node_type', 'node_type'),
       $this->container->get('entity_type.manager'),
       $field_manager,
-      $current_context,
       $this->container->get('plugin.manager.field.field_type'),
       $this->container->get('jsonapi.link_manager'),
       $this->container->get('jsonapi.resource_type.repository')
@@ -341,19 +323,11 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     ]);
     $request_stack = new RequestStack();
     $request_stack->push($request);
-    // Get the entity resource.
-    $current_context = new CurrentContext(
-      $this->container->get('jsonapi.resource_type.repository'),
-      $request_stack,
-      new CurrentRouteMatch($request_stack)
-    );
-    $this->container->set('jsonapi.current_context', $current_context);
 
     $entity_resource = new EntityResource(
       $this->container->get('jsonapi.resource_type.repository')->get('node', 'article'),
       $this->container->get('entity_type.manager'),
       $field_manager,
-      $current_context,
       $this->container->get('plugin.manager.field.field_type'),
       $this->container->get('jsonapi.link_manager'),
       $this->container->get('jsonapi.resource_type.repository')
@@ -865,18 +839,10 @@ class EntityResourceTest extends JsonapiKernelTestBase {
     $request_stack = new RequestStack();
     $request_stack->push($request);
     // Get the entity resource.
-    $current_context = new CurrentContext(
-      $this->container->get('jsonapi.resource_type.repository'),
-      $request_stack,
-      new CurrentRouteMatch($request_stack)
-    );
-    $this->container->set('jsonapi.current_context', $current_context);
-
     return new EntityResource(
       new ResourceType($entity_type_id, $bundle, NULL),
       $this->container->get('entity_type.manager'),
       $this->container->get('entity_field.manager'),
-      $current_context,
       $this->container->get('plugin.manager.field.field_type'),
       $this->container->get('jsonapi.link_manager'),
       $this->container->get('jsonapi.resource_type.repository')
diff --git a/tests/src/Unit/Context/CurrentContextTest.php b/tests/src/Unit/Context/CurrentContextTest.php
deleted file mode 100644
index c806e40..0000000
--- a/tests/src/Unit/Context/CurrentContextTest.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-
-namespace Drupal\Tests\jsonapi\Unit\Context;
-
-use Drupal\Core\Routing\CurrentRouteMatch;
-use Drupal\jsonapi\Context\CurrentContext;
-use Drupal\jsonapi\ResourceType\ResourceType;
-use Drupal\jsonapi\ResourceType\ResourceTypeRepository;
-use Drupal\jsonapi\Query\EntityConditionGroup;
-use Drupal\jsonapi\Query\Filter;
-use Drupal\jsonapi\Query\Sort;
-use Drupal\jsonapi\Query\OffsetPage;
-use Drupal\Core\Entity\EntityFieldManagerInterface;
-use Drupal\node\NodeInterface;
-use Drupal\Tests\UnitTestCase;
-use Symfony\Cmf\Component\Routing\RouteObjectInterface;
-use Symfony\Component\HttpFoundation\RequestStack;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\Routing\Route;
-
-/**
- * @coversDefaultClass \Drupal\jsonapi\Context\CurrentContext
- * @group jsonapi
- *
- * @internal
- */
-class CurrentContextTest extends UnitTestCase {
-
-  /**
-   * A mock for the current route.
-   *
-   * @var \Symfony\Component\Routing\Route
-   */
-  protected $currentRoute;
-
-  /**
-   * A mock for the JSON API resource type repository.
-   *
-   * @var \Drupal\jsonapi\ResourceType\ResourceTypeRepository
-   */
-  protected $resourceTypeRepository;
-
-  /**
-   * A request stack.
-   *
-   * @var \Symfony\Component\HttpFoundation\RequestStack
-   */
-  protected $requestStack;
-
-  /**
-   * The route matcher service.
-   *
-   * @var \Drupal\Core\Routing\StackedRouteMatchInterface
-   */
-  protected $routeMatcher;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setUp() {
-    // Create a mock for the entity field manager.
-    $this->fieldManager = $this->prophesize(EntityFieldManagerInterface::class)->reveal();
-
-    // Create a mock for the current route match.
-    $this->currentRoute = new Route(
-      '/jsonapi/articles',
-      [],
-      ['_entity_type' => 'node', '_bundle' => 'article']
-    );
-
-    // Create a mock for the ResourceTypeRepository service.
-    $resource_type_repository_prophecy = $this->prophesize(ResourceTypeRepository::class);
-    $resource_type_repository_prophecy->get('node', 'article')
-      ->willReturn(new ResourceType('node', 'article', NodeInterface::class));
-    $this->resourceTypeRepository = $resource_type_repository_prophecy->reveal();
-
-    $this->requestStack = new RequestStack();
-    $this->requestStack->push(new Request([], [], [
-      '_json_api_params' => [
-        'filter' => new Filter(new EntityConditionGroup('AND', [])),
-        'sort' => new Sort([]),
-        'page' => new OffsetPage(OffsetPage::DEFAULT_OFFSET, OffsetPage::SIZE_MAX),
-        // 'include' => new IncludeParam([]),
-        // 'fields' => new Fields([]),.
-      ],
-      RouteObjectInterface::ROUTE_OBJECT => $this->currentRoute,
-    ]));
-
-    $this->routeMatcher = new CurrentRouteMatch($this->requestStack);
-  }
-
-  /**
-   * @covers ::getResourceType
-   */
-  public function testGetResourceType() {
-    $request_context = new CurrentContext($this->resourceTypeRepository, $this->requestStack, $this->routeMatcher);
-
-    $this->assertEquals(
-      $this->resourceTypeRepository->get('node', 'article'),
-      $request_context->getResourceType()
-    );
-  }
-
-  /**
-   * @covers ::getJsonApiParameter
-   */
-  public function testGetJsonApiParameter() {
-    $request_context = new CurrentContext($this->resourceTypeRepository, $this->requestStack, $this->routeMatcher);
-
-    $actual = $request_context->getJsonApiParameter('sort');
-
-    $this->assertTrue($actual instanceof Sort);
-  }
-
-  /**
-   * @covers ::hasExtension
-   */
-  public function testHasExtensionWithExistingExtension() {
-    $request = new Request();
-    $request->headers->set('Content-Type', 'application/vnd.api+json; ext="ext1,ext2"');
-    $this->requestStack->push($request);
-    $request_context = new CurrentContext($this->resourceTypeRepository, $this->requestStack, $this->routeMatcher);
-
-    $this->assertTrue($request_context->hasExtension('ext1'));
-    $this->assertTrue($request_context->hasExtension('ext2'));
-  }
-
-  /**
-   * @covers ::getExtensions
-   */
-  public function testGetExtensions() {
-    $request = new Request();
-    $request->headers->set('Content-Type', 'application/vnd.api+json; ext="ext1,ext2"');
-    $this->requestStack->push($request);
-    $request_context = new CurrentContext($this->resourceTypeRepository, $this->requestStack, $this->routeMatcher);
-
-    $this->assertEquals(['ext1', 'ext2'], $request_context->getExtensions());
-  }
-
-  /**
-   * @covers ::hasExtension
-   */
-  public function testHasExtensionWithNotExistingExtension() {
-    $request = new Request();
-    $request->headers->set('Content-Type', 'application/vnd.api+json;');
-    $this->requestStack->push($request);
-    $request_context = new CurrentContext($this->resourceTypeRepository, $this->requestStack, $this->routeMatcher);
-    $this->assertFalse($request_context->hasExtension('ext1'));
-    $this->assertFalse($request_context->hasExtension('ext2'));
-  }
-
-}
diff --git a/tests/src/Unit/Controller/RequestHandlerTest.php b/tests/src/Unit/Controller/RequestHandlerTest.php
index 3cb33d2..3b82907 100644
--- a/tests/src/Unit/Controller/RequestHandlerTest.php
+++ b/tests/src/Unit/Controller/RequestHandlerTest.php
@@ -3,8 +3,8 @@
 namespace Drupal\Tests\jsonapi\Unit\Controller;
 
 use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\jsonapi\Resource\JsonApiDocumentTopLevel;
 use Drupal\jsonapi\ResourceType\ResourceType;
-use Drupal\jsonapi\Context\CurrentContext;
 use Drupal\jsonapi\Controller\RequestHandler;
 use Drupal\Tests\UnitTestCase;
 use Prophecy\Argument;
@@ -34,22 +34,24 @@ class RequestHandlerTest extends UnitTestCase {
     $request->getContent()->willReturn('this is not used');
     $request->isMethodCacheable()->willReturn(FALSE);
     $request->getMethod()->willReturn(NULL);
-    $request->get(Argument::any())->willReturn(NULL);
+    $request->get('serialization_class')->willReturn(JsonApiDocumentTopLevel::class);
+    $request->get(Argument::type('string'))->willReturn(NULL);
     $request->getMimeType(Argument::any())->willReturn(NULL);
     $serializer = $this->prophesize(SerializerInterface::class);
     $serializer->deserialize(Argument::type('string'), Argument::type('string'), Argument::any(), Argument::type('array'))
       ->willThrow(new UnexpectedValueException('Foo'));
     $serializer->serialize(Argument::any(), Argument::any(), Argument::any())
       ->willReturn('{"errors":[{"status":422,"message":"Foo"}]}');
-    $current_context = $this->prophesize(CurrentContext::class);
-    $current_context->getResourceType()
-      ->willReturn(new ResourceType($this->randomMachineName(), $this->randomMachineName(), NULL));
+    $resource_type = new ResourceType(
+      $this->randomMachineName(),
+      $this->randomMachineName(),
+      'invalid'
+    );
     try {
       $request_handler->deserializeBody(
         $request->reveal(),
         $serializer->reveal(),
-        'invalid',
-        $current_context->reveal()
+        $resource_type
       );
       $this->fail('Expected exception.');
     }
diff --git a/tests/src/Unit/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php b/tests/src/Unit/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
index f007c98..0e9faac 100644
--- a/tests/src/Unit/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
+++ b/tests/src/Unit/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
@@ -11,7 +11,6 @@ use Drupal\jsonapi\Context\FieldResolver;
 use Drupal\jsonapi\ResourceType\ResourceType;
 use Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer;
 use Drupal\jsonapi\LinkManager\LinkManager;
-use Drupal\jsonapi\Context\CurrentContext;
 use Drupal\Tests\UnitTestCase;
 use Prophecy\Argument;
 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
@@ -40,7 +39,6 @@ class JsonApiDocumentTopLevelNormalizerTest extends UnitTestCase {
    */
   public function setUp() {
     $link_manager = $this->prophesize(LinkManager::class);
-    $current_context_manager = $this->prophesize(CurrentContext::class);
     $resource_type_repository = $this->prophesize(ResourceTypeRepository::class);
     $field_resolver = $this->prophesize(FieldResolver::class);
 
@@ -74,11 +72,8 @@ class JsonApiDocumentTopLevelNormalizerTest extends UnitTestCase {
     $current_route = $this->prophesize(Route::class);
     $current_route->getDefault('_on_relationship')->willReturn(FALSE);
 
-    $current_context_manager->isOnRelationship()->willReturn(FALSE);
-
     $this->normalizer = new JsonApiDocumentTopLevelNormalizer(
       $link_manager->reveal(),
-      $current_context_manager->reveal(),
       $entity_type_manager->reveal(),
       $resource_type_repository->reveal(),
       $field_resolver->reveal()
diff --git a/tests/src/Unit/Routing/RoutesTest.php b/tests/src/Unit/Routing/RoutesTest.php
index f6b2899..6bc98d8 100644
--- a/tests/src/Unit/Routing/RoutesTest.php
+++ b/tests/src/Unit/Routing/RoutesTest.php
@@ -68,7 +68,7 @@ class RoutesTest extends UnitTestCase {
     $this->assertSame(['lorem', 'ipsum'], $route->getOption('_auth'));
     $this->assertEquals(['GET', 'POST'], $route->getMethods());
     $this->assertSame(Routes::FRONT_CONTROLLER, $route->getDefault(RouteObjectInterface::CONTROLLER_NAME));
-    $this->assertSame('Drupal\jsonapi\Resource\JsonApiDocumentTopLevel', $route->getOption('serialization_class'));
+    $this->assertSame('Drupal\jsonapi\Resource\JsonApiDocumentTopLevel', $route->getDefault('serialization_class'));
   }
 
   /**
@@ -86,9 +86,12 @@ class RoutesTest extends UnitTestCase {
     $this->assertSame('bundle_1_1', $route->getRequirement('_bundle'));
     $this->assertEquals(['GET', 'PATCH', 'DELETE'], $route->getMethods());
     $this->assertSame(Routes::FRONT_CONTROLLER, $route->getDefault(RouteObjectInterface::CONTROLLER_NAME));
-    $this->assertSame('Drupal\jsonapi\Resource\JsonApiDocumentTopLevel', $route->getOption('serialization_class'));
+    $this->assertSame('Drupal\jsonapi\Resource\JsonApiDocumentTopLevel', $route->getDefault('serialization_class'));
     $this->assertSame(['lorem', 'ipsum'], $route->getOption('_auth'));
-    $this->assertEquals(['entity_type_1' => ['type' => 'entity:entity_type_1']], $route->getOption('parameters'));
+    $this->assertEquals([
+      'entity_type_1' => ['type' => 'entity:entity_type_1'],
+      'resource_type' => ['type' => 'jsonapi_resource_type'],
+    ], $route->getOption('parameters'));
   }
 
   /**
@@ -107,7 +110,10 @@ class RoutesTest extends UnitTestCase {
     $this->assertEquals(['GET'], $route->getMethods());
     $this->assertSame(Routes::FRONT_CONTROLLER, $route->getDefault(RouteObjectInterface::CONTROLLER_NAME));
     $this->assertSame(['lorem', 'ipsum'], $route->getOption('_auth'));
-    $this->assertEquals(['entity_type_1' => ['type' => 'entity:entity_type_1']], $route->getOption('parameters'));
+    $this->assertEquals([
+      'entity_type_1' => ['type' => 'entity:entity_type_1'],
+      'resource_type' => ['type' => 'jsonapi_resource_type'],
+    ], $route->getOption('parameters'));
   }
 
   /**
@@ -126,8 +132,11 @@ class RoutesTest extends UnitTestCase {
     $this->assertEquals(['GET', 'POST', 'PATCH', 'DELETE'], $route->getMethods());
     $this->assertSame(Routes::FRONT_CONTROLLER, $route->getDefault(RouteObjectInterface::CONTROLLER_NAME));
     $this->assertSame(['lorem', 'ipsum'], $route->getOption('_auth'));
-    $this->assertEquals(['entity_type_1' => ['type' => 'entity:entity_type_1']], $route->getOption('parameters'));
-    $this->assertSame('Drupal\Core\Field\EntityReferenceFieldItemList', $route->getOption('serialization_class'));
+    $this->assertEquals([
+      'entity_type_1' => ['type' => 'entity:entity_type_1'],
+      'resource_type' => ['type' => 'jsonapi_resource_type'],
+    ], $route->getOption('parameters'));
+    $this->assertSame('Drupal\Core\Field\EntityReferenceFieldItemList', $route->getDefault('serialization_class'));
   }
 
 }
