Class EncodedResourceResolver

java.lang.Object
org.springframework.web.servlet.resource.AbstractResourceResolver
org.springframework.web.servlet.resource.EncodedResourceResolver
All Implemented Interfaces:
ResourceResolver

public class EncodedResourceResolver extends AbstractResourceResolver
Resolver that delegates to the chain, and if a resource is found, it then attempts to find an encoded (e.g. gzip, brotli) variant that is acceptable based on the "Accept-Encoding" request header.

The list of supported contentCodings can be configured, in order of preference, and each coding must be associated with extensions.

Note that this resolver must be ordered ahead of a VersionResourceResolver with a content-based, version strategy to ensure the version calculation is not impacted by the encoding.

Since:
5.1
Author:
Rossen Stoyanchev
  • Field Details

    • DEFAULT_CODINGS

      public static final List<String> DEFAULT_CODINGS
      The default content codings.
  • Constructor Details

    • EncodedResourceResolver

      public EncodedResourceResolver()
  • Method Details

    • setContentCodings

      public void setContentCodings(List<String> codings)
      Configure the supported content codings in order of preference. The first coding that is present in the "Accept-Encoding" header for a given request, and that has a file present with the associated extension, is used.

      Note: Each coding must be associated with a file extension via registerExtension(java.lang.String, java.lang.String) or setExtensions(java.util.Map<java.lang.String, java.lang.String>). Also customizations to the list of codings here should be matched by customizations to the same list in CachingResourceResolver to ensure encoded variants of a resource are cached under separate keys.

      By default this property is set to ["br", "gzip"].

      Parameters:
      codings - one or more supported content codings
    • getContentCodings

      public List<String> getContentCodings()
      Return a read-only list with the supported content codings.
    • setExtensions

      public void setExtensions(Map<String,String> extensions)
      Configure mappings from content codings to file extensions. A dot "." will be prepended in front of the extension value if not present.

      By default this is configured with ["br" -> ".br"] and ["gzip" -> ".gz"].

      Parameters:
      extensions - the extensions to use.
      See Also:
    • getExtensions

      public Map<String,String> getExtensions()
      Return a read-only map with coding-to-extension mappings.
    • registerExtension

      public void registerExtension(String coding, String extension)
      Java config friendly alternative to setExtensions(Map).
      Parameters:
      coding - the content coding
      extension - the associated file extension
    • resolveResourceInternal

      @Nullable protected org.springframework.core.io.Resource resolveResourceInternal(@Nullable HttpServletRequest request, String requestPath, List<? extends org.springframework.core.io.Resource> locations, ResourceResolverChain chain)
      Specified by:
      resolveResourceInternal in class AbstractResourceResolver
    • resolveUrlPathInternal

      @Nullable protected String resolveUrlPathInternal(String resourceUrlPath, List<? extends org.springframework.core.io.Resource> locations, ResourceResolverChain chain)
      Specified by:
      resolveUrlPathInternal in class AbstractResourceResolver