springboot整合swagger3报Unable to infer base url错误问题

 更新时间:2024年05月22日 10:47:17   作者:天国的囚徒  
这篇文章主要介绍了springboot整合swagger3报Unable to infer base url错误问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

springboot整swagger3

工程中的pom文件加入依赖包

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

代码中配置Swagger3Config

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * 说明:Swagger 接口API生成
 * 作者:wanghan
 */
@Configuration
@EnableOpenApi
public class Swagger3Config {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.wanghan.ctrl"))    // 为当前包路径
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Swagger3 RESTful API")    // 页面标题
                .version("3.0")                                // 版本号
                .description("接口文档")                    // 描述
                .build();
    }
}

Swagger 拦截配置

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 说明:Swagger 拦截配置
 * 作者:wanghan
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.
                addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                .resourceChain(false);
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/swagger-ui/")
                .setViewName("forward:/swagger-ui/index.html");
    }
}

至此swagger已经配置到你的项目中了。

可以通过url访问了:

http://localhost:8080/swagger-ui/index.html

总是不那么顺利

然而在使用过程中,总是出现这个那个问题:

问题一:提示没有权限访问

如果你使用安全框架,Swagger3的内置接口就会访问受限,我们需要排除掉。

Spring Security是这么配置的:

@Override
public void configure(WebSecurity web) throws Exception {
    //忽略swagger3所需要用到的静态资源,允许访问
    web.ignoring().antMatchers( "/swagger-ui.html",
            "/swagger-ui/**",
            "/swagger-resources/**",
            "/v2/api-docs",
            "/v3/api-docs",
            "/webjars/**");
}

或者你使用的版本是Spring Security 5.4,你可以这么定制​​WebSecurity

@Bean
WebSecurityCustomizer swaggerWebSecurityCustomizer() {
    return (web) -> {
        web.ignoring().antMatchers(new String[]{"/swagger-ui.html", "/swagger-ui/**", "/swagger-resources/**", "/v2/api-docs", "/v3/api-docs", "/webjars/**"});
    };
}

问题二:报​​Unable to infer base url

你会发现Swagger3会报​​Unable to infer base url的错误,这是因为统一返回体影响到了Swagger3的一些内置接口。

解决方法是​​

@RestControllerAdvice​​​控制好生效的包范围,在你的实现类上加上basePackages = “项目包路径”

@ControllerAdvice(basePackages = "com.wanghan")
public class ApiResBodyAdvice implements ResponseBodyAdvice {
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 数据结构线性表之顺序存储详解原理

    Java 数据结构线性表之顺序存储详解原理

    线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系
    2021-10-10
  • Java开发中可以防止界面假死的刷新代码

    Java开发中可以防止界面假死的刷新代码

    今天小编就为大家分享一篇关于Java开发中可以防止界面假死的刷新代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java如何获取List<String>中的String详解

    Java如何获取List<String>中的String详解

    工作了这么长时间了,一直没有记录的习惯,以至于导致我即便是查过的东西总会忘记,下面这篇文章主要给大家介绍了关于Java如何获取List<String>中String的相关资料,需要的朋友可以参考下
    2022-02-02
  • springboot开启Bean数据校验功能

    springboot开启Bean数据校验功能

    这篇文章主要介绍了springboot开启Bean数据校验功能,通过启用Bean属性校验导入JSR303与Hibernate校验框架坐标,使用@Validated注解启用校验功能,需要的朋友可以参考下
    2023-10-10
  • 浅析JDK和Tomcat的安装与配置方法

    浅析JDK和Tomcat的安装与配置方法

    这篇文章主要介绍了JDK和Tomcat的安装与配置方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-12-12
  • Java中IO流文件读取、写入和复制的实例

    Java中IO流文件读取、写入和复制的实例

    下面小编就为大家带来一篇Java中IO流文件读取、写入和复制的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java并发编程实例分析

    java并发编程实例分析

    在本文里我们给大家分享了关于java并发编程实例分析以及相关知识点,需要的朋友们学习下。
    2019-03-03
  • 基于Apache组件分析对象池原理的实现案例分析

    基于Apache组件分析对象池原理的实现案例分析

    本文从对象池的一个简单案例切入,主要分析common-pool2组件关于:池、工厂、配置、对象管理几个角色的源码逻辑,并且参考其在Redis中的实践,对Apache组件分析对象池原理相关知识感兴趣的朋友一起看看吧
    2022-04-04
  • java中char对应的ASCII码的转化操作

    java中char对应的ASCII码的转化操作

    这篇文章主要介绍了java中char对应的ASCII码的转化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Maven学习----Maven安装与环境变量配置教程

    Maven学习----Maven安装与环境变量配置教程

    这篇文章主要给大家介绍了关于如何利用Maven入手Spring Boot第一个程序的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06

最新评论