![](/img/trans.png)
[英]Unable to infer base url - Spring 4.2, Spring Security 4.2, Swagger 2.8.0
[英]Swagger UI - Unable to infer base url in Swagger 2.9.2
所以,我兩天前才開始使用 Swagger,我在我的 API 上看到了一個關於如何配置基本 Swagger 文檔的視頻。 該視頻只是告訴您使用以下代碼創建一個新的 class:
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("your-api-package")
.paths(PathSelectors.any())
.build();
}
我下載了 spring-instrument.jar 並將其添加到我的項目中。 在 pom.xml 中添加了依賴項,僅此而已。 然后當我嘗試訪問 localhost/my-project/swagger-ui.html 時出現 Unable to infer base url 錯誤。 上網查了一下,發現我也需要添加Swagger Security,所以我最終下載了spring-security.jar。 我使用以下代碼創建了 SwaggerSecurity class:
private static final String[] AUTH_LIST = {
"/swagger-resources/**",
"/swagger-ui.html",
"/v2/api-docs",
"/webjars/**"
};
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().antMatchers(AUTH_LIST).authenticated()
.and()
.httpBasic().authenticationEntryPoint(swaggerAuthenticationEntryPoint())
.and()
.csrf().disable();
}
@Bean
public BasicAuthenticationEntryPoint swaggerAuthenticationEntryPoint() {
BasicAuthenticationEntryPoint entryPoint = new BasicAuthenticationEntryPoint();
entryPoint.setRealmName("Swagger Realm");
return entryPoint;
}
這似乎解決了某些人的問題,但錯誤仍然存在。 所以我想知道是否有人也遇到過這種情況,你們是如何解決這個問題的。 我不知道它是否對我的問題增加了任何內容,但我正在使用最新的 Eclipse 版本來運行該項目。
您的問題中有很多不清楚的地方,但讓我試試。
如果您正在運行帶有嵌入式 tomcat 的 spring 應用程序,那么您需要定義 servlet 上下文路徑。 只需在src/main/resources/application.properties
中添加以下行
server.servlet.context-path=/my-project
並嘗試再次運行,它應該工作。
如果它仍然不起作用,請嘗試將您的Docket
bean 定義修改為:
@Autowired
private javax.servlet.ServletContext servletContext;
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.pathProvider(new springfox.documentation.spring.web.paths.RelativePathProvider(servletContext) {
@Override
protected String applicationPath() {
return "/my-project";
}
})
.select()
.apis(RequestHandlerSelectors.basePackage("your-api-package"))
.paths(PathSelectors.any())
.build();
}
添加以下依賴項:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
在您的項目中擴展WebMvcConfigurationSupport
並覆蓋addResourceHandlers 。
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("your-base-package"))
.paths(PathSelectors.any())
.build();
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
在 controller 中注釋@Api
和@ApiOperation
。
@RestController
@Api(tags = {"Hello controller"})
@RequestMapping(value = "api")
public class HelloController {
@ApiOperation(value = "greet")
@GetMapping(value = "/greet", consumes = "application/json")
public ResponseEntity<String> index() {
return ResponseEntity.ok("Greetings from Spring Boot!");
}
}
這就像一個魅力。 開始您的服務。 從瀏覽器中點擊localhost:8080/swagger-ui.html 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.