Check that PathPatternParser is not set too late
This commit ensures the PathPatternParser cannot be set after request mappings have been initialized when it is too late. See gh-26427
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2020 the original author or authors.
|
* Copyright 2002-2021 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -48,6 +48,7 @@ import org.springframework.web.cors.CorsConfiguration;
|
|||||||
import org.springframework.web.cors.CorsUtils;
|
import org.springframework.web.cors.CorsUtils;
|
||||||
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.method.HandlerMethod;
|
||||||
import org.springframework.web.servlet.HandlerMapping;
|
import org.springframework.web.servlet.HandlerMapping;
|
||||||
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract base class for {@link HandlerMapping} implementations that define
|
* Abstract base class for {@link HandlerMapping} implementations that define
|
||||||
@@ -99,6 +100,14 @@ public abstract class AbstractHandlerMethodMapping<T> extends AbstractHandlerMap
|
|||||||
private final MappingRegistry mappingRegistry = new MappingRegistry();
|
private final MappingRegistry mappingRegistry = new MappingRegistry();
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPatternParser(PathPatternParser patternParser) {
|
||||||
|
Assert.state(this.mappingRegistry.getRegistrations().isEmpty(),
|
||||||
|
"PathPatternParser must be set before the initialization of " +
|
||||||
|
"request mappings through InitializingBean#afterPropertiesSet.");
|
||||||
|
super.setPatternParser(patternParser);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether to detect handler methods in beans in ancestor ApplicationContexts.
|
* Whether to detect handler methods in beans in ancestor ApplicationContexts.
|
||||||
* <p>Default is "false": Only beans in the current ApplicationContext are
|
* <p>Default is "false": Only beans in the current ApplicationContext are
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import org.springframework.web.servlet.HandlerMapping;
|
|||||||
import org.springframework.web.util.ServletRequestPathUtils;
|
import org.springframework.web.util.ServletRequestPathUtils;
|
||||||
import org.springframework.web.util.UrlPathHelper;
|
import org.springframework.web.util.UrlPathHelper;
|
||||||
import org.springframework.web.util.pattern.PathPattern;
|
import org.springframework.web.util.pattern.PathPattern;
|
||||||
|
import org.springframework.web.util.pattern.PathPatternParser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract base class for URL-mapped {@link HandlerMapping} implementations.
|
* Abstract base class for URL-mapped {@link HandlerMapping} implementations.
|
||||||
@@ -74,6 +75,14 @@ public abstract class AbstractUrlHandlerMapping extends AbstractHandlerMapping i
|
|||||||
private final Map<PathPattern, Object> pathPatternHandlerMap = new LinkedHashMap<>();
|
private final Map<PathPattern, Object> pathPatternHandlerMap = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPatternParser(PathPatternParser patternParser) {
|
||||||
|
Assert.state(this.handlerMap.isEmpty(),
|
||||||
|
"PathPatternParser must be set before the initialization of " +
|
||||||
|
"the handler map via ApplicationContextAware#setApplicationContext.");
|
||||||
|
super.setPatternParser(patternParser);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the root handler for this handler mapping, that is,
|
* Set the root handler for this handler mapping, that is,
|
||||||
* the handler to be registered for the root path ("/").
|
* the handler to be registered for the root path ("/").
|
||||||
|
|||||||
Reference in New Issue
Block a user