美文网首页
swagger3弹窗Unable to infer base u

swagger3弹窗Unable to infer base u

作者: 程序员Darker | 来源:发表于2021-10-29 21:36 被阅读0次

在上篇文章 https://www.jianshu.com/p/3819b7fe604f 写了根据目录生成路由前缀

在集成swagger3的时候发现弹窗报错

这时候debug可以发现,在自定义路由前缀代码那里,它处理了swagger的前缀,但我设置路由前缀的初心是为了定义自己项目的路由前缀。
这时候解决报错很简单,只需要再加个判断只处理自己的包的路由前缀即可。

关键代码就是加了这行代码判断

handlerType.getPackageName().contains(this.apiPackagePath)

修改后的完整代码如下

package cn.wangningbo.mall.core.hack;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

import java.lang.reflect.Method;

/**
 * 自定义 RequestMappingHandlerMapping 处理目录生成路由前缀
 *
 * @author wangningbo
 */
public class AutoPrefixUrMapping extends RequestMappingHandlerMapping {

    @Value("${mall.api-package}")
    private String apiPackagePath;

    @Override
    protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
        RequestMappingInfo mappingInfo = super.getMappingForMethod(method, handlerType);
        if (mappingInfo != null && handlerType.getPackageName().contains(this.apiPackagePath)) {
            String prefix = this.getPrefix(handlerType);
            return RequestMappingInfo.paths(prefix).build().combine(mappingInfo);
        }
        return mappingInfo;
    }

    /**
     * 获取路由前缀
     *
     * @param handlerType
     * @return
     */
    private String getPrefix(Class<?> handlerType) {
        String packageName = handlerType.getPackageName();
        String doPath = packageName.replaceAll(this.apiPackagePath, "");
        return doPath.replace(".", "/");
    }
}

相关文章

网友评论

      本文标题:swagger3弹窗Unable to infer base u

      本文链接:https://www.haomeiwen.com/subject/vvdwaltx.html