 core/core.services.yml                             |  15 ++-
 core/lib/Drupal/Core/Routing/BcRoute.php           |  29 +++++
 .../tests/src/Functional/DbLogResourceTest.php     |   2 +-
 core/modules/rest/rest.services.yml                |   5 +
 core/modules/rest/src/Plugin/ResourceBase.php      |  42 +++----
 .../RestResourceGetRouteProcessorBC.php            |  80 ++++++++++++
 core/modules/rest/src/Routing/ResourceRoutes.php   |  25 ++--
 .../EntityResource/EntityResourceTestBase.php      |  23 +++-
 .../user/src/Tests/RestRegisterUserTest.php        |   3 +-
 .../Tests/Listeners/DeprecationListenerTrait.php   | 138 +++++++++++++++++++++
 10 files changed, 324 insertions(+), 38 deletions(-)

diff --git a/core/core.services.yml b/core/core.services.yml
index 49b2708..dec301d 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -933,11 +933,22 @@ services:
   method_filter:
     class: Drupal\Core\Routing\MethodFilter
     tags:
-      - { name: route_filter, priority: 1 }
+      # The HTTP method route filter must run very early: it removes any routes
+      # whose requirements do not allow the HTTP method of the current request.
+      # Throws a 405 if no routes match the current request's HTTP method.
+      # (If it runs before content_type_header_matcher, it can ensure that that
+      # only receives routes which can have a Content-Type request header.)
+      - { name: route_filter, priority: 10 }
   content_type_header_matcher:
     class: Drupal\Core\Routing\ContentTypeHeaderMatcher
     tags:
-      - { name: route_filter }
+      # The Content-Type request header route filter must run early: it removes
+      # any routes whose requirements do not allow the Content-Type request
+      # header of the current request.
+      # Throws a 415 if no routes match the Content-Type request header of the
+      # current request, or if it has no Content-Type request header.
+      # Note it does nothing for GET requests.
+      - { name: route_filter, priority: 5 }
   paramconverter_manager:
     class: Drupal\Core\ParamConverter\ParamConverterManager
     tags:
diff --git a/core/lib/Drupal/Core/Routing/BcRoute.php b/core/lib/Drupal/Core/Routing/BcRoute.php
new file mode 100644
index 0000000..e886931
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/BcRoute.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\Routing\Route;
+
+/**
+ * A backwards compatibility route.
+ *
+ * When a route is deprecated for another one, and backwards compatibility is
+ * provided, then it's best practice to:
+ * - not duplicate all route definition metadata, to instead have an "as empty
+ *   as possible" route
+ * - have an accompanying outbound route processor, that overwrites this empty
+ *   route definition with the redirected route's definition.
+ *
+ * F.e. see \Drupal\rest\RouteProcessor\RestResourceGetRouteProcessorBC.
+ */
+class BcRoute extends Route {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct() {
+    parent::__construct('');
+    $this->setOption('bc_route', TRUE);
+  }
+
+}
diff --git a/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php b/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php
index db05b43..0d46303 100644
--- a/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php
+++ b/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php
@@ -62,7 +62,7 @@ public function testWatchdog() {
       ->fetchField();
 
     $this->initAuthentication();
-    $url = Url::fromRoute('rest.dblog.GET.' . static::$format, ['id' => $id, '_format' => static::$format]);
+    $url = Url::fromRoute('rest.dblog.GET', ['id' => $id, '_format' => static::$format]);
     $request_options = $this->getAuthenticationRequestOptions('GET');
 
     $response = $this->request('GET', $url, $request_options);
diff --git a/core/modules/rest/rest.services.yml b/core/modules/rest/rest.services.yml
index 080a681..511628e 100644
--- a/core/modules/rest/rest.services.yml
+++ b/core/modules/rest/rest.services.yml
@@ -43,3 +43,8 @@ services:
     arguments: ['@entity_type.manager']
     tags:
       - { name: path_processor_inbound }
+  rest.route_processor_get_bc:
+    class: \Drupal\rest\RouteProcessor\RestResourceGetRouteProcessorBC
+    arguments: ['%serializer.formats%', '@router.route_provider']
+    tags:
+      - { name: route_processor_outbound }
diff --git a/core/modules/rest/src/Plugin/ResourceBase.php b/core/modules/rest/src/Plugin/ResourceBase.php
index b40a031..743674f 100644
--- a/core/modules/rest/src/Plugin/ResourceBase.php
+++ b/core/modules/rest/src/Plugin/ResourceBase.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Plugin\PluginBase;
+use Drupal\Core\Routing\BcRoute;
 use Psr\Log\LoggerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\Routing\Route;
@@ -114,29 +115,24 @@ public function routes() {
 
     $methods = $this->availableMethods();
     foreach ($methods as $method) {
-      $route = $this->getBaseRoute($canonical_path, $method);
-
-      switch ($method) {
-        case 'POST':
-          $route->setPath($create_path);
-          $collection->add("$route_name.$method", $route);
-          break;
-
-        case 'GET':
-        case 'HEAD':
-          // Restrict GET and HEAD requests to the media type specified in the
-          // HTTP Accept headers.
-          foreach ($this->serializerFormats as $format_name) {
-            // Expose one route per available format.
-            $format_route = clone $route;
-            $format_route->addRequirements(['_format' => $format_name]);
-            $collection->add("$route_name.$method.$format_name", $format_route);
-          }
-          break;
-
-        default:
-          $collection->add("$route_name.$method", $route);
-          break;
+      $path = $method === 'POST'
+        ? $create_path
+        : $canonical_path;
+      $route = $this->getBaseRoute($path, $method);
+
+      // Note that '_format' and '_content_type_format' route requirements are
+      // added in ResourceRoutes::getRoutesForResourceConfig().
+      $collection->add("$route_name.$method", $route);
+
+      // BC: the REST module originally created per-format GET routes, instead
+      // of a single route. To minimize the surface of this BC layer, this uses
+      // route definitions that are as empty as possible, plus an outbound route
+      // processor.
+      // @see \Drupal\rest\RouteProcessor\RestResourceGetRouteProcessorBC
+      if ($method === 'GET' || $method === 'HEAD') {
+        foreach ($this->serializerFormats as $format_name) {
+          $collection->add("$route_name.$method.$format_name", (new BcRoute())->setRequirement('_format', $format_name));
+        }
       }
     }
 
diff --git a/core/modules/rest/src/RouteProcessor/RestResourceGetRouteProcessorBC.php b/core/modules/rest/src/RouteProcessor/RestResourceGetRouteProcessorBC.php
new file mode 100644
index 0000000..cf55326
--- /dev/null
+++ b/core/modules/rest/src/RouteProcessor/RestResourceGetRouteProcessorBC.php
@@ -0,0 +1,80 @@
+<?php
+
+namespace Drupal\rest\RouteProcessor;
+
+use Drupal\Core\Render\BubbleableMetadata;
+use Drupal\Core\RouteProcessor\OutboundRouteProcessorInterface;
+use Drupal\Core\Routing\RouteProviderInterface;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Processes the BC REST routes, to ensure old route names continue to work.
+ */
+class RestResourceGetRouteProcessorBC implements OutboundRouteProcessorInterface {
+
+  /**
+   * The available serialization formats.
+   *
+   * @var string[]
+   */
+  protected $serializerFormats = [];
+
+  /**
+   * The route provider.
+   *
+   * @var \Drupal\Core\Routing\RouteProviderInterface
+   */
+  protected $routeProvider;
+
+  /**
+   * Constructs a RestResourceGetRouteProcessorBC object.
+   *
+   * @param string[] $serializer_formats
+   *   The available serialization formats.
+   * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
+   *   The route provider.
+   */
+  public function __construct(array $serializer_formats, RouteProviderInterface $route_provider) {
+    $this->serializerFormats = $serializer_formats;
+    $this->routeProvider = $route_provider;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processOutbound($route_name, Route $route, array &$parameters, BubbleableMetadata $bubbleable_metadata = NULL) {
+    $route_name_parts = explode('.', $route_name);
+    // BC: the REST module originally created per-format GET routes, instead
+    // of a single route. To minimize the surface of this BC layer, this uses
+    // route definitions that are as empty as possible, plus an outbound route
+    // processor.
+    // @see \Drupal\rest\Plugin\ResourceBase::routes()
+    if ($route_name_parts[0] === 'rest' && $route_name_parts[count($route_name_parts) - 2] === 'GET' && in_array($route_name_parts[count($route_name_parts) - 1], $this->serializerFormats, TRUE)) {
+      array_pop($route_name_parts);
+      $redirected_route_name = implode('.', $route_name_parts);
+      @trigger_error(sprintf("The '%s' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the '%s' route instead.", $route_name, $redirected_route_name), E_USER_DEPRECATED);
+      static::overwriteRoute($route, $this->routeProvider->getRouteByName($redirected_route_name));
+    }
+  }
+
+  /**
+   * Overwrites one route's metadata with the other's.
+   *
+   * @param \Symfony\Component\Routing\Route $target_route
+   *   The route whose metadata to overwrite.
+   * @param \Symfony\Component\Routing\Route $source_route
+   *   The route whose metadata to read from.
+   *
+   * @see \Symfony\Component\Routing\Route
+   */
+  protected static function overwriteRoute(Route $target_route, Route $source_route) {
+    $target_route->setPath($source_route->getPath());
+    $target_route->setDefaults($source_route->getDefaults());
+    $target_route->setRequirements($source_route->getRequirements());
+    $target_route->setOptions($source_route->getOptions());
+    $target_route->setHost($source_route->getHost());
+    $target_route->setSchemes($source_route->getSchemes());
+    $target_route->setMethods($source_route->getMethods());
+  }
+
+}
diff --git a/core/modules/rest/src/Routing/ResourceRoutes.php b/core/modules/rest/src/Routing/ResourceRoutes.php
index 5ba4c5d..a8449f9 100644
--- a/core/modules/rest/src/Routing/ResourceRoutes.php
+++ b/core/modules/rest/src/Routing/ResourceRoutes.php
@@ -92,8 +92,11 @@ protected function getRoutesForResourceConfig(RestResourceConfigInterface $rest_
       /** @var \Symfony\Component\Routing\Route $route */
       // @todo: Are multiple methods possible here?
       $methods = $route->getMethods();
-      // Only expose routes where the method is enabled in the configuration.
-      if ($methods && ($method = $methods[0]) && $supported_formats = $rest_resource_config->getFormats($method)) {
+      // Only expose routes
+      // - that have an explicit method and allow >=1 format for that method
+      // - that exist for BC
+      // @see \Drupal\rest\RouteProcessor\RestResourceGetRouteProcessorBC
+      if (($methods && ($method = $methods[0]) && $supported_formats = $rest_resource_config->getFormats($method)) || $route->hasOption('bc_route')) {
         $route->setRequirement('_csrf_request_header_token', 'TRUE');
 
         // Check that authentication providers are defined.
@@ -108,20 +111,24 @@ protected function getRoutesForResourceConfig(RestResourceConfigInterface $rest_
           continue;
         }
 
-        // If the route has a format requirement, then verify that the
-        // resource has it.
-        $format_requirement = $route->getRequirement('_format');
-        if ($format_requirement && !in_array($format_requirement, $rest_resource_config->getFormats($method))) {
-          continue;
+        // Remove BC routes for unsupported formats.
+        if ($route->getOption('bc_route') === TRUE) {
+          $format_requirement = $route->getRequirement('_format');
+          if ($format_requirement && !in_array($format_requirement, $rest_resource_config->getFormats($method))) {
+            continue;
+          }
         }
 
         // The configuration has been validated, so we update the route to:
+        // - set the allowed response body content types/formats for methods
+        //   that may send response bodies
         // - set the allowed request body content types/formats for methods that
         //   allow request bodies to be sent
         // - set the allowed authentication providers
+        if (in_array($method, ['GET', 'HEAD', 'POST', 'PUT', 'PATCH'], TRUE)) {
+          $route->addRequirements(['_format' => implode('|', $rest_resource_config->getFormats($method))]);
+        }
         if (in_array($method, ['POST', 'PATCH', 'PUT'], TRUE)) {
-          // Restrict the incoming HTTP Content-type header to the allowed
-          // formats.
           $route->addRequirements(['_content_type_format' => implode('|', $rest_resource_config->getFormats($method))]);
         }
         $route->setOption('_auth', $rest_resource_config->getAuthenticationProviders($method));
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
index 4c7947d..48bfc12 100644
--- a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
+++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
@@ -21,6 +21,7 @@
 use Drupal\Tests\rest\Functional\ResourceTestBase;
 use GuzzleHttp\RequestOptions;
 use Psr\Http\Message\ResponseInterface;
+use Symfony\Component\Routing\Exception\RouteNotFoundException;
 
 /**
  * Even though there is the generic EntityResource, it's necessary for every
@@ -639,15 +640,32 @@ public function testGet() {
     $this->assert406Response($response);
     $this->assertSame(['text/plain; charset=UTF-8'], $response->getHeader('Content-Type'));
 
-    $url = Url::fromRoute('rest.entity.' . static::$entityTypeId . '.GET.' . static::$format);
+    $url = Url::fromRoute('rest.entity.' . static::$entityTypeId . '.GET');
     $url->setRouteParameter(static::$entityTypeId, 987654321);
     $url->setOption('query', ['_format' => static::$format]);
 
     // DX: 404 when GETting non-existing entity.
     $response = $this->request('GET', $url, $request_options);
     $path = str_replace('987654321', '{' . static::$entityTypeId . '}', $url->setAbsolute()->setOptions(['base_url' => '', 'query' => []])->toString());
-    $message = 'The "' . static::$entityTypeId . '" parameter was not converted for the path "' . $path . '" (route name: "rest.entity.' . static::$entityTypeId . '.GET.' . static::$format . '")';
+    $message = 'The "' . static::$entityTypeId . '" parameter was not converted for the path "' . $path . '" (route name: "rest.entity.' . static::$entityTypeId . '.GET")';
     $this->assertResourceErrorResponse(404, $message, $response);
+
+    // BC: Format-specific GET routes are deprecated. They are available on both
+    // new and old sites, but trigger deprecation notices.
+    $bc_route = Url::fromRoute('rest.entity.' . static::$entityTypeId . '.GET.' . static::$format, $url->getRouteParameters(), $url->getOptions());
+    $bc_route->setUrlGenerator($this->container->get('url_generator'));
+    $this->assertSame($url->toString(TRUE)->getGeneratedUrl(), $bc_route->toString(TRUE)->getGeneratedUrl());
+    // Verify no format-specific GET BC routes are created for other formats.
+    $other_format = static::$format === 'json' ? 'xml' : 'json';
+    $bc_route_other_format = Url::fromRoute('rest.entity.' . static::$entityTypeId . '.GET.' . $other_format, $url->getRouteParameters(), $url->getOptions());
+    $bc_route_other_format->setUrlGenerator($this->container->get('url_generator'));
+    try {
+      $bc_route_other_format->toString(TRUE);
+      $this->assertTrue(FALSE);
+    }
+    catch (RouteNotFoundException $e) {
+      $this->assertTrue(TRUE);
+    }
   }
 
   /**
@@ -887,6 +905,7 @@ public function testPost() {
     if ($this->entity->getEntityType()->hasLinkTemplate('create')) {
       $this->entityStorage->load(static::$secondCreatedEntityId)->delete();
       $old_url = Url::fromUri('base:entity/' . static::$entityTypeId);
+      $old_url->setOption('query', ['_format' => static::$format]);
       $response = $this->request('POST', $old_url, $request_options);
       $this->assertResourceResponse(201, FALSE, $response);
     }
diff --git a/core/modules/user/src/Tests/RestRegisterUserTest.php b/core/modules/user/src/Tests/RestRegisterUserTest.php
index 450c552..31bcce4 100644
--- a/core/modules/user/src/Tests/RestRegisterUserTest.php
+++ b/core/modules/user/src/Tests/RestRegisterUserTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\user\Tests;
 
+use Drupal\Core\Url;
 use Drupal\rest\Tests\RESTTestBase;
 use Drupal\user\Entity\Role;
 use Drupal\user\RoleInterface;
@@ -166,7 +167,7 @@ protected function registerUser($name, $include_password = TRUE) {
    */
   protected function registerRequest($name, $include_password = TRUE) {
     $serialized = $this->createSerializedUser($name, $include_password);
-    $this->httpRequest('/user/register', 'POST', $serialized, 'application/hal+json');
+    $this->httpRequest(Url::fromRoute('rest.user_registration.POST', ['_format' => 'hal_json']), 'POST', $serialized, 'application/hal+json');
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php b/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
index b7445fb..c434e43 100644
--- a/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
+++ b/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
@@ -123,6 +123,144 @@ public static function getSkippedDeprecations() {
       'drupal_get_message() is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Messenger\MessengerInterface::all() or \Drupal\Core\Messenger\MessengerInterface::messagesByType() instead. See https://www.drupal.org/node/2774931',
       'Adding or retrieving messages prior to the container being initialized was deprecated in Drupal 8.5.0 and this functionality will be removed before Drupal 9.0.0. Please report this usage at https://www.drupal.org/node/2928994.',
       'The "serializer.normalizer.file_entity.hal" normalizer service is deprecated: it is obsolete, it only remains available for backwards compatibility.',
+      "The 'rest.entity.entity_test.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test.GET' route instead",
+      "The 'rest.entity.entity_test.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test.GET' route instead",
+      "The 'rest.entity.entity_test.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test.GET' route instead",
+      "The 'rest.entity.action.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.action.GET' route instead",
+      "The 'rest.entity.action.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.action.GET' route instead",
+      "The 'rest.entity.action.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.action.GET' route instead",
+      "The 'rest.entity.base_field_override.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.base_field_override.GET' route instead",
+      "The 'rest.entity.base_field_override.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.base_field_override.GET' route instead",
+      "The 'rest.entity.base_field_override.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.base_field_override.GET' route instead",
+      "The 'rest.entity.block_content_type.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block_content_type.GET' route instead",
+      "The 'rest.entity.block_content_type.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block_content_type.GET' route instead",
+      "The 'rest.entity.block_content_type.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block_content_type.GET' route instead",
+      "The 'rest.entity.block_content.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block_content.GET' route instead",
+      "The 'rest.entity.block_content.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block_content.GET' route instead",
+      "The 'rest.entity.block_content.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block_content.GET' route instead",
+      "The 'rest.entity.block.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block.GET' route instead",
+      "The 'rest.entity.block.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block.GET' route instead",
+      "The 'rest.entity.block.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.block.GET' route instead",
+      "The 'rest.entity.comment_type.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.comment_type.GET' route instead",
+      "The 'rest.entity.comment_type.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.comment_type.GET' route instead",
+      "The 'rest.entity.comment_type.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.comment_type.GET' route instead",
+      "The 'rest.entity.comment.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.comment.GET' route instead",
+      "The 'rest.entity.comment.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.comment.GET' route instead",
+      "The 'rest.entity.comment.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.comment.GET' route instead",
+      "The 'rest.entity.config_test.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.config_test.GET' route instead",
+      "The 'rest.entity.config_test.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.config_test.GET' route instead",
+      "The 'rest.entity.config_test.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.config_test.GET' route instead",
+      "The 'rest.entity.configurable_language.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.configurable_language.GET' route instead",
+      "The 'rest.entity.configurable_language.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.configurable_language.GET' route instead",
+      "The 'rest.entity.configurable_language.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.configurable_language.GET' route instead",
+      "The 'rest.entity.contact_form.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.contact_form.GET' route instead",
+      "The 'rest.entity.contact_form.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.contact_form.GET' route instead",
+      "The 'rest.entity.contact_form.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.contact_form.GET' route instead",
+      "The 'rest.entity.language_content_settings.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.language_content_settings.GET' route instead",
+      "The 'rest.entity.language_content_settings.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.language_content_settings.GET' route instead",
+      "The 'rest.entity.language_content_settings.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.language_content_settings.GET' route instead",
+      "The 'rest.entity.date_format.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.date_format.GET' route instead",
+      "The 'rest.entity.date_format.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.date_format.GET' route instead",
+      "The 'rest.entity.date_format.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.date_format.GET' route instead",
+      "The 'rest.entity.editor.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.editor.GET' route instead",
+      "The 'rest.entity.editor.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.editor.GET' route instead",
+      "The 'rest.entity.editor.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.editor.GET' route instead",
+      "The 'rest.entity.entity_form_display.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_form_display.GET' route instead",
+      "The 'rest.entity.entity_form_display.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_form_display.GET' route instead",
+      "The 'rest.entity.entity_form_display.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_form_display.GET' route instead",
+      "The 'rest.entity.entity_form_mode.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_form_mode.GET' route instead",
+      "The 'rest.entity.entity_form_mode.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_form_mode.GET' route instead",
+      "The 'rest.entity.entity_form_mode.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_form_mode.GET' route instead",
+      "The 'rest.entity.entity_test_bundle.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test_bundle.GET' route instead",
+      "The 'rest.entity.entity_test_bundle.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test_bundle.GET' route instead",
+      "The 'rest.entity.entity_test_bundle.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test_bundle.GET' route instead",
+      "The 'rest.entity.entity_test_label.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test_label.GET' route instead",
+      "The 'rest.entity.entity_test_label.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test_label.GET' route instead",
+      "The 'rest.entity.entity_test_label.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_test_label.GET' route instead",
+      "The 'rest.entity.entity_view_display.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_view_display.GET' route instead",
+      "The 'rest.entity.entity_view_display.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_view_display.GET' route instead",
+      "The 'rest.entity.entity_view_display.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_view_display.GET' route instead",
+      "The 'rest.entity.entity_view_mode.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_view_mode.GET' route instead",
+      "The 'rest.entity.entity_view_mode.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_view_mode.GET' route instead",
+      "The 'rest.entity.entity_view_mode.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.entity_view_mode.GET' route instead",
+      "The 'rest.entity.aggregator_feed.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.aggregator_feed.GET' route instead",
+      "The 'rest.entity.aggregator_feed.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.aggregator_feed.GET' route instead",
+      "The 'rest.entity.aggregator_feed.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.aggregator_feed.GET' route instead",
+      "The 'rest.entity.field_config.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.field_config.GET' route instead",
+      "The 'rest.entity.field_config.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.field_config.GET' route instead",
+      "The 'rest.entity.field_config.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.field_config.GET' route instead",
+      "The 'rest.entity.field_storage_config.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.field_storage_config.GET' route instead",
+      "The 'rest.entity.field_storage_config.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.field_storage_config.GET' route instead",
+      "The 'rest.entity.field_storage_config.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.field_storage_config.GET' route instead",
+      "The 'rest.entity.file.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.file.GET' route instead",
+      "The 'rest.entity.file.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.file.GET' route instead",
+      "The 'rest.entity.file.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.file.GET' route instead",
+      "The 'rest.entity.filter_format.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.filter_format.GET' route instead",
+      "The 'rest.entity.filter_format.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.filter_format.GET' route instead",
+      "The 'rest.entity.filter_format.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.filter_format.GET' route instead",
+      "The 'rest.entity.image_style.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.image_style.GET' route instead",
+      "The 'rest.entity.image_style.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.image_style.GET' route instead",
+      "The 'rest.entity.image_style.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.image_style.GET' route instead",
+      "The 'rest.entity.aggregator_item.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.aggregator_item.GET' route instead",
+      "The 'rest.entity.aggregator_item.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.aggregator_item.GET' route instead",
+      "The 'rest.entity.aggregator_item.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.aggregator_item.GET' route instead",
+      "The 'rest.entity.media_type.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.media_type.GET' route instead",
+      "The 'rest.entity.media_type.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.media_type.GET' route instead",
+      "The 'rest.entity.media_type.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.media_type.GET' route instead",
+      "The 'rest.entity.media.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.media.GET' route instead",
+      "The 'rest.entity.media.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.media.GET' route instead",
+      "The 'rest.entity.media.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.media.GET' route instead",
+      "The 'rest.entity.menu_link_content.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.menu_link_content.GET' route instead",
+      "The 'rest.entity.menu_link_content.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.menu_link_content.GET' route instead",
+      "The 'rest.entity.menu_link_content.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.menu_link_content.GET' route instead",
+      "The 'rest.entity.menu.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.menu.GET' route instead",
+      "The 'rest.entity.menu.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.menu.GET' route instead",
+      "The 'rest.entity.menu.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.menu.GET' route instead",
+      "The 'rest.entity.node_type.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.node_type.GET' route instead",
+      "The 'rest.entity.node_type.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.node_type.GET' route instead",
+      "The 'rest.entity.node_type.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.node_type.GET' route instead",
+      "The 'rest.entity.node.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.node.GET' route instead",
+      "The 'rest.entity.node.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.node.GET' route instead",
+      "The 'rest.entity.node.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.node.GET' route instead",
+      "The 'rest.entity.rdf_mapping.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.rdf_mapping.GET' route instead",
+      "The 'rest.entity.rdf_mapping.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.rdf_mapping.GET' route instead",
+      "The 'rest.entity.rdf_mapping.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.rdf_mapping.GET' route instead",
+      "The 'rest.entity.responsive_image_style.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.responsive_image_style.GET' route instead",
+      "The 'rest.entity.responsive_image_style.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.responsive_image_style.GET' route instead",
+      "The 'rest.entity.responsive_image_style.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.responsive_image_style.GET' route instead",
+      "The 'rest.entity.rest_resource_config.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.rest_resource_config.GET' route instead",
+      "The 'rest.entity.rest_resource_config.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.rest_resource_config.GET' route instead",
+      "The 'rest.entity.rest_resource_config.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.rest_resource_config.GET' route instead",
+      "The 'rest.entity.user_role.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.user_role.GET' route instead",
+      "The 'rest.entity.user_role.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.user_role.GET' route instead",
+      "The 'rest.entity.user_role.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.user_role.GET' route instead",
+      "The 'rest.entity.search_page.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.search_page.GET' route instead",
+      "The 'rest.entity.search_page.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.search_page.GET' route instead",
+      "The 'rest.entity.search_page.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.search_page.GET' route instead",
+      "The 'rest.entity.shortcut_set.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.shortcut_set.GET' route instead",
+      "The 'rest.entity.shortcut_set.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.shortcut_set.GET' route instead",
+      "The 'rest.entity.shortcut_set.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.shortcut_set.GET' route instead",
+      "The 'rest.entity.shortcut.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.shortcut.GET' route instead",
+      "The 'rest.entity.shortcut.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.shortcut.GET' route instead",
+      "The 'rest.entity.shortcut.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.shortcut.GET' route instead",
+      "The 'rest.entity.taxonomy_term.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.taxonomy_term.GET' route instead",
+      "The 'rest.entity.taxonomy_term.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.taxonomy_term.GET' route instead",
+      "The 'rest.entity.taxonomy_term.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.taxonomy_term.GET' route instead",
+      "The 'rest.entity.tour.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.tour.GET' route instead",
+      "The 'rest.entity.tour.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.tour.GET' route instead",
+      "The 'rest.entity.tour.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.tour.GET' route instead",
+      "The 'rest.entity.user.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.user.GET' route instead",
+      "The 'rest.entity.user.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.user.GET' route instead",
+      "The 'rest.entity.user.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.user.GET' route instead",
+      "The 'rest.entity.view.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.view.GET' route instead",
+      "The 'rest.entity.view.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.view.GET' route instead",
+      "The 'rest.entity.view.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.view.GET' route instead",
+      "The 'rest.entity.taxonomy_vocabulary.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.taxonomy_vocabulary.GET' route instead",
+      "The 'rest.entity.taxonomy_vocabulary.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.taxonomy_vocabulary.GET' route instead",
+      "The 'rest.entity.taxonomy_vocabulary.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.taxonomy_vocabulary.GET' route instead",
+      "The 'rest.entity.workflow.GET.json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.workflow.GET' route instead",
+      "The 'rest.entity.workflow.GET.xml' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.workflow.GET' route instead",
+      "The 'rest.entity.workflow.GET.hal_json' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the 'rest.entity.workflow.GET' route instead",
     ];
   }
 
