不罗嗦直接上代码!可直接复制代码到自己项目即可!
- 用BeanDefinitionRegistryPostProcessor替换Bean: WebMvcRequestHandlerProvider
public class CompatiblePathPatternParser implements BeanDefinitionRegistryPostProcessor, EnvironmentAware {
static final String BEAN_NAME = "webMvcRequestHandlerProvider";
private Environment environment;
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
WebMvcProperties.MatchingStrategy strategy = environment.getProperty("spring.mvc.pathmatch.matching-strategy", WebMvcProperties.MatchingStrategy.class);
if(registry.containsBeanDefinition(BEAN_NAME) && strategy != WebMvcProperties.MatchingStrategy.ANT_PATH_MATCHER){
registry.removeBeanDefinition(BEAN_NAME);
registry.registerBeanDefinition(BEAN_NAME,new RootBeanDefinition(WebMvcRequestHandlerProvider.class));
}
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
}
- WebMvcPatternsRequestConditionWrapper
public class WebMvcPatternsRequestConditionWrapper implements springfox.documentation.spring.wrapper.PatternsRequestCondition{ private final String contextPath; private final PathPatternsRequestCondition condition; public WebMvcPatternsRequestConditionWrapper(String contextPath, PathPatternsRequestCondition condition) { this.contextPath = contextPath; this.condition = condition; } @Override public springfox.documentation.spring.wrapper.PatternsRequestCondition combine( springfox.documentation.spring.wrapper.PatternsRequestCondition other) { if (other instanceof WebMvcPatternsRequestConditionWrapper && !this.equals(other)) { return new WebMvcPatternsRequestConditionWrapper( contextPath, condition.combine(((WebMvcPatternsRequestConditionWrapper) other).condition)); } return this; } @Override public Set getPatterns() { return this.condition.getPatterns().stream() .map(p -> String.format("%s/%s", maybeChompTrailingSlash(contextPath), maybeChompLeadingSlash(p.getPatternString()))) .collect(Collectors.toSet()); } @Override public boolean equals(Object o) { if (o instanceof WebMvcPatternsRequestConditionWrapper) { return this.condition.equals(((WebMvcPatternsRequestConditionWrapper) o).condition); } return false; } @Override public int hashCode() { return this.condition.hashCode(); } @Override public String toString() { return this.condition.toString(); } }
- WebMvcRequestHandler
public class WebMvcRequestHandler implements RequestHandler {
private final String contextPath;
private final HandlerMethodResolver methodResolver;
private final RequestMappingInfo requestMapping;
private final HandlerMethod handlerMethod;
public WebMvcRequestHandler(
String contextPath,
HandlerMethodResolver methodResolver,
RequestMappingInfo requestMapping,
HandlerMethod handlerMethod) {
this.contextPath = contextPath;
this.methodResolver = methodResolver;
this.requestMapping = requestMapping;
this.handlerMethod = handlerMethod;
}
@Override
public HandlerMethod getHandlerMethod() {
return handlerMethod;
}
@Override
public RequestHandler combine(RequestHandler other) {
return this;
}
@Override
public Class> declaringClass() {
return handlerMethod.getBeanType();
}
@Override
public boolean isAnnotatedWith(Class extends Annotation> annotation) {
return null != AnnotationUtils.findAnnotation(handlerMethod.getMethod(), annotation);
}
@Override
public PatternsRequestCondition getPatternsCondition() {
return new WebMvcPatternsRequestConditionWrapper(contextPath,requestMapping.getPathPatternsCondition());
}
@Override
public String groupName() {
return ControllerNamingUtils.controllerNameAsGroup(handlerMethod);
}
@Override
public String getName() {
return handlerMethod.getMethod().getName();
}
@Override
public Set supportedMethods() {
return requestMapping.getMethodsCondition().getMethods();
}
@Override
public Set produces() {
return requestMapping.getProducesCondition().getProducibleMediaTypes();
}
@Override
public Set consumes() {
return requestMapping.getConsumesCondition().getConsumableMediaTypes();
}
@Override
public Set> headers() {
return WebMvcNameValueExpressionWrapper.from(requestMapping.getHeadersCondition().getExpressions());
}
@Override
public Set> params() {
return WebMvcNameValueExpressionWrapper.from(requestMapping.getParamsCondition().getExpressions());
}
@Override
public Optional findAnnotation(Class annotation) {
return ofNullable(AnnotationUtils.findAnnotation(handlerMethod.getMethod(), annotation));
}
@Override
public RequestHandlerKey key() {
return new RequestHandlerKey(
requestMapping.getPathPatternsCondition().getDirectPaths(),
requestMapping.getMethodsCondition().getMethods(),
requestMapping.getConsumesCondition().getConsumableMediaTypes(),
requestMapping.getProducesCondition().getProducibleMediaTypes());
}
@Override
public springfox.documentation.spring.wrapper.RequestMappingInfo> getRequestMapping() {
return new WebMvcRequestMappingInfoWrapper(requestMapping);
}
@Override
public List getParameters() {
return methodResolver.methodParameters(handlerMethod);
}
@Override
public ResolvedType getReturnType() {
return methodResolver.methodReturnType(handlerMethod);
}
@Override
public Optional findControllerAnnotation(Class annotation) {
return ofNullable(AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), annotation));
}
@Override
public String toString() {
return new StringJoiner(", ", WebMvcRequestHandler.class.getSimpleName() + "{", "}")
.add("requestMapping=" + requestMapping)
.add("handlerMethod=" + handlerMethod)
.add("key=" + key())
.toString();
}
}
- WebMvcRequestHandlerProvider
public class WebMvcRequestHandlerProvider implements RequestHandlerProvider {
private final List handlerMappings;
private final HandlerMethodResolver methodResolver;
private final String contextPath;
public WebMvcRequestHandlerProvider(Optional servletContext,HandlerMethodResolver methodResolver,List handlerMappings) {
this.handlerMappings = handlerMappings;
this.methodResolver = methodResolver;
this.contextPath = servletContext.map(ServletContext::getContextPath).orElse(ROOT);
}
@Override
public List requestHandlers() {
return nullToEmptyList(handlerMappings).stream()
.filter(requestMappingInfoHandlerMapping ->
!("org.springframework.integration.http.inbound.IntegrationRequestMappingHandlerMapping"
.equals(requestMappingInfoHandlerMapping.getClass()
.getName())))
.map(toMappingEntries())
.flatMap((entries -> StreamSupport.stream(entries.spliterator(), false)))
.map(toRequestHandler())
.sorted(byPatternsCondition())
.collect(toList());
}
private Function>> toMappingEntries() {
return input -> input.getHandlerMethods()
.entrySet();
}
private Function, RequestHandler> toRequestHandler() {
return input -> new WebMvcRequestHandler(
contextPath,
methodResolver,
input.getKey(),
input.getValue());
}
}
暑期编程PK赛
得CSDN机械键盘等精美礼品!


