Springboot2.6.0不兼容swagger3.0.0问题

时间:2025-03-17 22:25:15

版本

<parent>
  <groupId></groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.6.0</version>
</parent>

版本 

      <dependency>
        <groupId></groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
      </dependency>

原因分析:

spring5支持PathMatchConfigurer导致

启动报错解决方案1:

重写

两个类;

将PatternsRequestCondition改为PathPatternsRequestCondition;

package ;

import static ;
import static ;

import ;
import ;
import ;
import ;

/**
 * swagger3.0兼容springBoot2.6.0处理
 */
public class WebMvcPatternsRequestConditionWrapper
        implements
        <PatternsRequestCondition> {

    private final String contextPath;
    private final PathPatternsRequestCondition condition;

    public WebMvcPatternsRequestConditionWrapper(
            String contextPath,
            PathPatternsRequestCondition condition) {

         = contextPath;
         = condition;
    }

    @Override
    public  combine(
            <PatternsRequestCondition> other) {
        if (other instanceof WebMvcPatternsRequestConditionWrapper && !(other)) {
            return new WebMvcPatternsRequestConditionWrapper(
                    contextPath,
                    (((WebMvcPatternsRequestConditionWrapper) other).condition));
        }
        return this;
    }

    @Override
    public Set<String> getPatterns() {
        return ().stream()
                .map(p -> ("%s/%s", maybeChompTrailingSlash(contextPath),
                        maybeChompLeadingSlash(p)))
                .collect(());
    }


    @Override
    public boolean equals(Object o) {
        if (o instanceof WebMvcPatternsRequestConditionWrapper) {
            return (((WebMvcPatternsRequestConditionWrapper) o).condition);
        }
        return false;
    }

    @Override
    public int hashCode() {
        return ();
    }


    @Override
    public String toString() {
        return ();
    }
}


package ;

import static ;

import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;

/**
 * swagger3.0兼容springBoot2.6.0处理
 */
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) {
         = contextPath;
         = methodResolver;
         = requestMapping;
         = handlerMethod;
    }

    @Override
    public HandlerMethod getHandlerMethod() {
        return handlerMethod;
    }

    @Override
    public RequestHandler combine(RequestHandler other) {
        return this;
    }

    @Override
    public Class<?> declaringClass() {
        return ();
    }

    @Override
    public boolean isAnnotatedWith(Class<? extends Annotation> annotation) {
        return null != ((), annotation);
    }

    @Override
    public PatternsRequestCondition getPatternsCondition() {
        return new WebMvcPatternsRequestConditionWrapper(
                contextPath,
                ());
    }

    @Override
    public String groupName() {
        return (handlerMethod);
    }

    @Override
    public String getName() {
        return ().getName();
    }

    @Override
    public Set<RequestMethod> supportedMethods() {
        return ().getMethods();
    }

    @Override
    public Set<MediaType> produces() {
        return ().getProducibleMediaTypes();
    }

    @Override
    public Set<MediaType> consumes() {
        return ().getConsumableMediaTypes();
    }

    @Override
    public Set<NameValueExpression<String>> headers() {
        return WebMvcNameValueExpressionWrapper
                .from(().getExpressions());
    }

    @Override
    public Set<NameValueExpression<String>> params() {
        return WebMvcNameValueExpressionWrapper
                .from(().getExpressions());
    }

    @Override
    public <T extends Annotation> Optional<T> findAnnotation(Class<T> annotation) {
        return ofNullable(((), annotation));
    }

    @Override
    public RequestHandlerKey key() {
        return new RequestHandlerKey(
                ().getPatternValues(),
                ().getMethods(),
                ().getConsumableMediaTypes(),
                ().getProducibleMediaTypes());
    }

    @Override
    public <?> getRequestMapping() {
        return new WebMvcRequestMappingInfoWrapper(requestMapping);
    }

    @Override
    public List<ResolvedMethodParameter> getParameters() {
        return (handlerMethod);
    }

    @Override
    public ResolvedType getReturnType() {
        return (handlerMethod);
    }

    @Override
    public <T extends Annotation> Optional<T> findControllerAnnotation(Class<T> annotation) {
        return ofNullable(((), annotation));
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", () + "{", "}")
                .add("requestMapping=" + requestMapping)
                .add("handlerMethod=" + handlerMethod)
                .add("key=" + key())
                .toString();
    }
}