Class VersionResourceResolver
- All Implemented Interfaces:
ResourceResolver
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:
-
Field Summary
Fields inherited from class org.springframework.web.reactive.resource.AbstractResourceResolver
logger
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionaddContentVersionStrategy
(String... pathPatterns) Insert a content-based version in resource URLs that match the given path patterns.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"
.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 aVersionStrategy
for the request path of the requested resource.Return the map with version strategies keyed by path pattern.protected reactor.core.publisher.Mono<Resource>
resolveResourceInternal
(ServerWebExchange exchange, String requestPath, List<? extends Resource> locations, ResourceResolverChain chain) protected reactor.core.publisher.Mono<String>
resolveUrlPathInternal
(String resourceUrlPath, List<? extends Resource> locations, ResourceResolverChain chain) void
Set a Map with URL paths as keys andVersionStrategy
as values.Methods inherited from class org.springframework.web.reactive.resource.AbstractResourceResolver
resolveResource, resolveUrlPath
-
Constructor Details
-
VersionResourceResolver
public VersionResourceResolver()
-
-
Method Details
-
setStrategyMap
Set a Map with URL paths as keys andVersionStrategy
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
Return the map with version strategies keyed by path pattern. -
addContentVersionStrategy
Insert a content-based version in resource URLs that match the given path patterns. The version is computed from the content of the file, for example,"css/main-e36d2e05253c6c7085a91522ce43a0b4.css"
. This is a good default strategy to use except when it cannot be, for example when using JavaScript module loaders, useaddFixedVersionStrategy(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:
-
addFixedVersionStrategy
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 (for example, see
@Value
in Java config).If not done already, variants of the given
pathPatterns
, prefixed with theversion
will be also configured. For example, adding a"/js/**"
path pattern will also configure automatically a"/v1.0.0/js/**"
with"v1.0.0"
theversion
String given as an argument.- Parameters:
version
- a version stringpathPatterns
- 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:
-
addVersionStrategy
Register a custom VersionStrategy to apply to resource URLs that match the given path patterns.- Parameters:
strategy
- the custom strategypathPatterns
- 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:
-
resolveResourceInternal
protected reactor.core.publisher.Mono<Resource> resolveResourceInternal(@Nullable ServerWebExchange exchange, String requestPath, List<? extends Resource> locations, ResourceResolverChain chain) - Specified by:
resolveResourceInternal
in classAbstractResourceResolver
-
resolveUrlPathInternal
protected reactor.core.publisher.Mono<String> resolveUrlPathInternal(String resourceUrlPath, List<? extends Resource> locations, ResourceResolverChain chain) - Specified by:
resolveUrlPathInternal
in classAbstractResourceResolver
-
getStrategyForPath
Find aVersionStrategy
for the request path of the requested resource.- Returns:
- an instance of a
VersionStrategy
or null if none matches that request path
-