- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在我的 spring 项目中配置 swagger,但是点击“http://localhost:8080/api-docs”说“404 Not Found”。
Maven 依赖
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.8.2</version>
</dependency>
package com.ucap.swagger;
import com.mangofactory.swagger.configuration.JacksonScalaSupport;
import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.configuration.SpringSwaggerModelConfig;
import com.mangofactory.swagger.configuration.SwaggerGlobalSettings;
import com.mangofactory.swagger.core.DefaultSwaggerPathProvider;
import com.mangofactory.swagger.core.SwaggerApiResourceListing;
import com.mangofactory.swagger.core.SwaggerPathProvider;
import com.mangofactory.swagger.scanners.ApiListingReferenceScanner;
import com.wordnik.swagger.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
@Configuration
@ComponentScan(basePackages = "com.mangofactory.swagger")
public class SwaggerConfig {
public static final List<String> DEFAULT_INCLUDE_PATTERNS = Arrays.asList("/news/.*");
public static final String SWAGGER_GROUP = "mobile-api";
@Value("${app.docs}")
private String docsLocation;
@Autowired
private SpringSwaggerConfig springSwaggerConfig;
@Autowired
private SpringSwaggerModelConfig springSwaggerModelConfig;
/**
* Adds the jackson scala module to the MappingJackson2HttpMessageConverter registered with spring
* Swagger core models are scala so we need to be able to convert to JSON
* Also registers some custom serializers needed to transform swagger models to swagger-ui required json format
*/
@Bean
public JacksonScalaSupport jacksonScalaSupport() {
JacksonScalaSupport jacksonScalaSupport = new JacksonScalaSupport();
//Set to false to disable
jacksonScalaSupport.setRegisterScalaModule(true);
return jacksonScalaSupport;
}
/**
* Global swagger settings
*/
@Bean
public SwaggerGlobalSettings swaggerGlobalSettings() {
SwaggerGlobalSettings swaggerGlobalSettings = new SwaggerGlobalSettings();
swaggerGlobalSettings.setGlobalResponseMessages(springSwaggerConfig.defaultResponseMessages());
swaggerGlobalSettings.setIgnorableParameterTypes(springSwaggerConfig.defaultIgnorableParameterTypes());
swaggerGlobalSettings.setParameterDataTypes(springSwaggerModelConfig.defaultParameterDataTypes());
return swaggerGlobalSettings;
}
/**
* API Info as it appears on the swagger-ui page
*/
private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo(
"News API",
"Mobile applications and beyond!",
"https://helloreverb.com/terms/",
"matt@raibledesigns.com",
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0.html"
);
return apiInfo;
}
/**
* Configure a SwaggerApiResourceListing for each swagger instance within your app. e.g. 1. private 2. external apis
* Required to be a spring bean as spring will call the postConstruct method to bootstrap swagger scanning.
*
* @return
*/
@Bean
public SwaggerApiResourceListing swaggerApiResourceListing() {
//The group name is important and should match the group set on ApiListingReferenceScanner
//Note that swaggerCache() is by DefaultSwaggerController to serve the swagger json
SwaggerApiResourceListing swaggerApiResourceListing = new SwaggerApiResourceListing(springSwaggerConfig.swaggerCache(), SWAGGER_GROUP);
//Set the required swagger settings
swaggerApiResourceListing.setSwaggerGlobalSettings(swaggerGlobalSettings());
//Use a custom path provider or springSwaggerConfig.defaultSwaggerPathProvider()
swaggerApiResourceListing.setSwaggerPathProvider(apiPathProvider());
//Supply the API Info as it should appear on swagger-ui web page
swaggerApiResourceListing.setApiInfo(apiInfo());
//Global authorization - see the swagger documentation
swaggerApiResourceListing.setAuthorizationTypes(authorizationTypes());
//Every SwaggerApiResourceListing needs an ApiListingReferenceScanner to scan the spring request mappings
swaggerApiResourceListing.setApiListingReferenceScanner(apiListingReferenceScanner());
return swaggerApiResourceListing;
}
@Bean
/**
* The ApiListingReferenceScanner does most of the work.
* Scans the appropriate spring RequestMappingHandlerMappings
* Applies the correct absolute paths to the generated swagger resources
*/
public ApiListingReferenceScanner apiListingReferenceScanner() {
ApiListingReferenceScanner apiListingReferenceScanner = new ApiListingReferenceScanner();
//Picks up all of the registered spring RequestMappingHandlerMappings for scanning
apiListingReferenceScanner.setRequestMappingHandlerMapping(springSwaggerConfig.swaggerRequestMappingHandlerMappings());
//Excludes any controllers with the supplied annotations
apiListingReferenceScanner.setExcludeAnnotations(springSwaggerConfig.defaultExcludeAnnotations());
//
apiListingReferenceScanner.setResourceGroupingStrategy(springSwaggerConfig.defaultResourceGroupingStrategy());
//Path provider used to generate the appropriate uri's
apiListingReferenceScanner.setSwaggerPathProvider(apiPathProvider());
//Must match the swagger group set on the SwaggerApiResourceListing
apiListingReferenceScanner.setSwaggerGroup(SWAGGER_GROUP);
//Only include paths that match the supplied regular expressions
apiListingReferenceScanner.setIncludePatterns(DEFAULT_INCLUDE_PATTERNS);
return apiListingReferenceScanner;
}
/**
* Example of a custom path provider
*/
@Bean
public ApiPathProvider apiPathProvider() {
ApiPathProvider apiPathProvider = new ApiPathProvider(docsLocation);
apiPathProvider.setDefaultSwaggerPathProvider(springSwaggerConfig.defaultSwaggerPathProvider());
return apiPathProvider;
}
private List<AuthorizationType> authorizationTypes() {
ArrayList<AuthorizationType> authorizationTypes = new ArrayList<>();
List<AuthorizationScope> authorizationScopeList = newArrayList();
authorizationScopeList.add(new AuthorizationScope("global", "access all"));
List<GrantType> grantTypes = newArrayList();
LoginEndpoint loginEndpoint = new LoginEndpoint(apiPathProvider().getAppBasePath() + "/user/authenticate");
grantTypes.add(new ImplicitGrant(loginEndpoint, "access_token"));
return authorizationTypes;
}
@Bean
public SwaggerPathProvider relativeSwaggerPathProvider() {
return new ApiRelativeSwaggerPathProvider();
}
private class ApiRelativeSwaggerPathProvider extends DefaultSwaggerPathProvider {
@Override
public String getAppBasePath() {
return "/";
}
@Override
public String getSwaggerDocumentationBasePath() {
return "/api-docs";
}
}
}
package com.ucap.swagger;
import com.mangofactory.swagger.core.SwaggerPathProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.util.UriComponentsBuilder;
import javax.servlet.ServletContext;
public class ApiPathProvider implements SwaggerPathProvider {
private SwaggerPathProvider defaultSwaggerPathProvider;
@Autowired
private ServletContext servletContext;
private String docsLocation;
public ApiPathProvider(String docsLocation) {
this.docsLocation = docsLocation;
}
@Override
public String getApiResourcePrefix() {
return defaultSwaggerPathProvider.getApiResourcePrefix();
}
public String getAppBasePath() {
return UriComponentsBuilder
.fromHttpUrl(docsLocation)
.path(servletContext.getContextPath())
.build()
.toString();
}
@Override
public String getSwaggerDocumentationBasePath() {
return UriComponentsBuilder
.fromHttpUrl(getAppBasePath())
.pathSegment("api-docs/")
.build()
.toString();
}
@Override
public String getRequestMappingEndpoint(String requestMappingPattern) {
return defaultSwaggerPathProvider.getRequestMappingEndpoint(requestMappingPattern);
}
public void setDefaultSwaggerPathProvider(SwaggerPathProvider defaultSwaggerPathProvider) {
this.defaultSwaggerPathProvider = defaultSwaggerPathProvider;
}
}
app.docs=http://localhost:8080
最佳答案
您使用的版本 (0.8.2) 是 springfox 的旧版本.您应该尝试移动到最新发布的版本,即 2.0 .
专门回答你的问题。
SwaggerConfig
看起来像这样。 @Configuration
//Hard to tell without seeing all your configuration, but optionally,
//add EnableWebMvc annotation in case its not working
@EnableWebMvc
@EnableSwagger
//Assuming your controllers are in this package
@ComponentScan(basePackages = "com.ucap.swagger")
public class SwaggerConfig {
public static final List<String> DEFAULT_INCLUDE_PATTERNS
= Arrays.asList("/news/.*");
//Unless you specifically want this group, I would recommend ignoring this
public static final String SWAGGER_GROUP = "mobile-api";
@Autowired
private SpringSwaggerConfig springSwaggerConfig;
@Bean
public SwaggerSpringMvcPlugin customImplementation(){
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.includePatterns(DEFAULT_INCLUDE_PATTERNS);
}
}
关于rest - "404 Not Found"在使用 swagger-springmvc(现在是 springfox)时查看 swagger api-docs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30183185/
我正在使用 springfox 的招摇实现。我想修改 swagger-ui.html 以采用自定义 header 值。如何修改此文件?或者告诉spring fox使用备用文件? 最佳答案 从 gith
我有 spring-mvc 应用程序,我已经嵌入了 RestAPI。一切正常,我的 rest api 映射到 /rest/* url。当我添加 SwaggerConfig 它已经开始识别我的 Cont
我必须从 swagger 上传 MultipartFile 类型的多个文件来测试我的 api。 postman 确实允许上传,但是,同样的事情在 swagger 中不起作用。 多部分文件列表的代码:
我正在使用 SpringFox (Swagger)记录我的 REST API。 Swagger 的一大优点是显示示例模型和数据类型格式。 现在,我将我的 API 配置为以毫秒为单位生成和使用日期,但是
在 Springfox 3.0 中,springfox.documentation.service.Parameter已弃用。 是否有提供参数及其构建器的更新方法? 以及如何提供其default值(v
有没有办法在 springfox swagger (2.7.0) 中公开继承/多态性?我知道 swagger 规范支持 allOf。 springfox支持这个吗?以下是示例域模型。 @ApiMode
在我的 spring boot rest API 中,我为每个端点的每个响应(与方法无关)发回一个唯一的请求 id header “x-request-id”。我可以使用这样的东西添加它: @ApiR
在我的 Spring Boot Rest api 中,我有以下类: @Entity @Table(name="Items") @JsonPropertyOrder({ "itemId", "descr
目前使用 springfox 2.9.2 Swagger 记录在 Spring 中创建的 API。 我想在文档中添加示例响应,就像这张图片一样; 我的理解是我可以做类似的事情: @ApiRespons
我正在使用 Springfox-swagger 为我的 Spring Boot REST 服务生成一个 Swagger 页面。作为我序列化为 JSON 的 POJO 之一的一部分,我使用: javax
我有一个简单的 Spring Boot 应用程序,它有一个 REST 端点来返回一个“Job”对象,该对象包含一系列多态性,旁边还有其他内容。我们采用“代码优先”方法并尝试创建 API 模型来满足我们
这是我第一次来这里。因此,我们在 Spring MVC 中构建了一个应用程序,使用 2 个 Java 类作为 Controller 来处理 REST 调用。其中一个用 @Controller 显式注释
我想添加一个自定义 Controller 来 swagger API 描述符。 使用 spring fox 可以很容易地自定义现有模型。 但是我没有成功地从头开始将自定义 API 添加到 swagge
我正在尝试使用 swagger-codegen 和 springfox 在 Web 服务开发过程中赢得时间。 我遇到了为带注释的接口(interface)类以及 Controller 实现创建端点的问
我将 SpringFox 库用于我的 spring boot 应用程序的其余文档。当我点击 model 时,所有元素都作为可选元素返回。有没有办法将必需的元素显示为强制性的?是否需要添加任何其他配置?
@RequestMapping(...) public Foo getFoo(@HeaderParam("header") final String header) { ... } 像上面那样
GitHub:https://github.com/springfox/springfox 文档:http://springfox.io 在说swagger-bootstrap-ui的代码之前,先
我有一个特定的 DTO,我正在使用它作为 Swagger 文档的示例返回。如果我有成功的 201 代码,我该如何更改示例? 招摇的示例响应: 我使用注释“@ApiModelProperty”来描述我的
我在互联网上搜索了如何自定义我的多个案卷的端点,但没有找到答案。 我的模块有几个 API。我想在不同的端点上生成 Swagger 文档,每个端点都位于其相应 API 的根目录上。例如 : 本地主机:8
想知道如何在 POST 中隐藏 Swagger 中的模型属性。我已经尝试过 Swagger-springmvc (0.9.3) 和 Springfox(支持 swagger spec 2.0)都无济于
我是一名优秀的程序员,十分优秀!