public class VersionResourceResolver extends AbstractResourceResolver
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.
VersionStrategy
logger
Constructor and Description |
---|
VersionResourceResolver() |
Modifier and Type | Method and Description |
---|---|
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<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 |
setStrategyMap(Map<String,VersionStrategy> map)
Set a Map with URL paths as keys and
VersionStrategy as values. |
resolveResource, resolveUrlPath
public void setStrategyMap(Map<String,VersionStrategy> map)
VersionStrategy
as values.
Supports direct URL matches and Ant-style pattern matches. For syntax
details, see the AntPathMatcher
javadoc.
map
- map with URLs as keys and version strategies as valuespublic Map<String,VersionStrategy> getStrategyMap()
public VersionResourceResolver addContentVersionStrategy(String... pathPatterns)
"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.pathPatterns
- one or more resource URL path patterns,
relative to the pattern configured with the resource handlerContentVersionStrategy
public VersionResourceResolver addFixedVersionStrategy(String version, String... pathPatterns)
"{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.
version
- a version stringpathPatterns
- one or more resource URL path patterns,
relative to the pattern configured with the resource handlerFixedVersionStrategy
public VersionResourceResolver addVersionStrategy(VersionStrategy strategy, String... pathPatterns)
strategy
- the custom strategypathPatterns
- one or more resource URL path patterns,
relative to the pattern configured with the resource handlerVersionStrategy
protected reactor.core.publisher.Mono<Resource> resolveResourceInternal(@Nullable ServerWebExchange exchange, String requestPath, List<? extends Resource> locations, ResourceResolverChain chain)
resolveResourceInternal
in class AbstractResourceResolver
protected reactor.core.publisher.Mono<String> resolveUrlPathInternal(String resourceUrlPath, List<? extends Resource> locations, ResourceResolverChain chain)
resolveUrlPathInternal
in class AbstractResourceResolver
@Nullable protected VersionStrategy getStrategyForPath(String requestPath)
VersionStrategy
for the request path of the requested resource.VersionStrategy
or null if none matches that request path