org.springframework.web.reactive.resource

## Class VersionResourceResolver

- java.lang.Object
- - org.springframework.web.reactive.resource.AbstractResourceResolver
  - - org.springframework.web.reactive.resource.VersionResourceResolver

All Implemented Interfaces:
  ResourceResolver

    public class VersionResourceResolver
    extends AbstractResourceResolver

Resolves request paths containing a version string that can be used as part of an HTTP caching strategy in which a resource is cached with a date in the distant future (e.g. 1 year) and cached until the version, and therefore the URL, is changed.

Different versioning strategies exist, and this resolver must be configured with one or more such strategies along with path mappings to indicate which strategy applies to which resources.

`ContentVersionStrategy` is a good default choice except in cases where it cannot be used. Most notably the `ContentVersionStrategy` cannot be combined with JavaScript module loaders. For such cases the `FixedVersionStrategy` is a better choice.

Note that using this resolver to serve CSS files means that the `CssLinkResourceTransformer` should also be used in order to modify links within CSS files to also contain the appropriate versions generated by this resolver.

Since:
  5.0
Author:
  Rossen Stoyanchev, Brian Clozel
See Also:
  `VersionStrategy`

### Field Summary

### Fields inherited from class org.springframework.web.reactive.resource.AbstractResourceResolver

`logger`

### Constructor Summary

Constructors
Constructor and Description
`VersionResourceResolver()`

### Method Summary

All Methods Instance Methods Concrete Methods
`VersionResourceResolver` `addContentVersionStrategy(String... pathPatterns)` Insert a content-based version in resource URLs that match the given path patterns.
`VersionResourceResolver` `addFixedVersionStrategy(String version, String... pathPatterns)` Insert a fixed, prefix-based version in resource URLs that match the given path patterns, for example: `"{version}/js/main.js"`.
`VersionResourceResolver` `addVersionStrategy(VersionStrategy strategy, String... pathPatterns)` Register a custom VersionStrategy to apply to resource URLs that match the given path patterns.
`protected VersionStrategy` `getStrategyForPath(String requestPath)` Find a `VersionStrategy` for the request path of the requested resource.
`Map<String,VersionStrategy>` `getStrategyMap()` Return the map with version strategies keyed by path pattern.
`protected reactor.core.publisher.Mono<org.springframework.core.io.Resource>` `resolveResourceInternal(org.springframework.web.server.ServerWebExchange exchange, String requestPath, List<? extends org.springframework.core.io.Resource> locations, ResourceResolverChain chain)`
`protected reactor.core.publisher.Mono<String>` `resolveUrlPathInternal(String resourceUrlPath, List<? extends org.springframework.core.io.Resource> locations, ResourceResolverChain chain)`
`void` `setStrategyMap(Map<String,VersionStrategy> map)` Set a Map with URL paths as keys and `VersionStrategy` as values.

### Methods inherited from class org.springframework.web.reactive.resource.AbstractResourceResolver

`resolveResource, resolveUrlPath`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### VersionResourceResolver

    public VersionResourceResolver()

### Method Detail

#### setStrategyMap

    public void setStrategyMap(Map<String,VersionStrategy> map)

Set a Map with URL paths as keys and `VersionStrategy` as values.

Supports direct URL matches and Ant-style pattern matches. For syntax details, see the `AntPathMatcher` javadoc.

Parameters:
  `map` - a map with URLs as keys and version strategies as values

#### getStrategyMap

    public Map<String,VersionStrategy> getStrategyMap()

Return the map with version strategies keyed by path pattern.

#### addContentVersionStrategy

    public VersionResourceResolver addContentVersionStrategy(String... pathPatterns)

Insert a content-based version in resource URLs that match the given path patterns. The version is computed from the content of the file, e.g. `"css/main-e36d2e05253c6c7085a91522ce43a0b4.css"`. This is a good default strategy to use except when it cannot be, for example when using JavaScript module loaders, use `addFixedVersionStrategy(java.lang.String, java.lang.String...)` instead for serving JavaScript files.

Parameters:
  `pathPatterns` - one or more resource URL path patterns, relative to the pattern configured with the resource handler
Returns:
  the current instance for chained method invocation
See Also:
  `ContentVersionStrategy`

#### addFixedVersionStrategy

    public VersionResourceResolver addFixedVersionStrategy(String version,
                                                           String... pathPatterns)

Insert a fixed, prefix-based version in resource URLs that match the given path patterns, for example: `"{version}/js/main.js"`. This is useful (vs. content-based versions) when using JavaScript module loaders.

The version may be a random number, the current date, or a value fetched from a git commit sha, a property file, or environment variable and set with SpEL expressions in the configuration (e.g. see `@Value` in Java config).

If not done already, variants of the given `pathPatterns`, prefixed with the `version` will be also configured. For example, adding a `"/js/**"` path pattern will also cofigure automatically a `"/v1.0.0/js/**"` with `"v1.0.0"` the `version` String given as an argument.

Parameters:
  `version` - a version string
  `pathPatterns` - one or more resource URL path patterns, relative to the pattern configured with the resource handler
Returns:
  the current instance for chained method invocation
See Also:
  `FixedVersionStrategy`

#### addVersionStrategy

    public VersionResourceResolver addVersionStrategy(VersionStrategy strategy,
                                                      String... pathPatterns)

Register a custom VersionStrategy to apply to resource URLs that match the given path patterns.

Parameters:
  `strategy` - the custom strategy
  `pathPatterns` - one or more resource URL path patterns, relative to the pattern configured with the resource handler
Returns:
  the current instance for chained method invocation
See Also:
  `VersionStrategy`

#### resolveResourceInternal

    protected reactor.core.publisher.Mono<org.springframework.core.io.Resource> resolveResourceInternal(@Nullable
                                                                                                        org.springframework.web.server.ServerWebExchange exchange,
                                                                                                        String requestPath,
                                                                                                        List<? extends org.springframework.core.io.Resource> locations,
                                                                                                        ResourceResolverChain chain)

Specified by:
  `resolveResourceInternal` in class `AbstractResourceResolver`

#### resolveUrlPathInternal

    protected reactor.core.publisher.Mono<String> resolveUrlPathInternal(String resourceUrlPath,
                                                                         List<? extends org.springframework.core.io.Resource> locations,
                                                                         ResourceResolverChain chain)

Specified by:
  `resolveUrlPathInternal` in class `AbstractResourceResolver`

#### getStrategyForPath

    @Nullable
    protected VersionStrategy getStrategyForPath(String requestPath)

Find a `VersionStrategy` for the request path of the requested resource.

Returns:
  an instance of a `VersionStrategy` or null if none matches that request path