标签: springfox

用于自定义响应的 Swagger 注释?

有一个像这样的自定义响应设置:

public class CustomResponse {
    private int id;
    private String productName;
    private int quantity;
    private double price;

    // Constructor & along with Getters & Setters

}
Run Code Online (Sandbox Code Playgroud)

我的 ProductController 中的 Swagger:

@RestController
@RequestMapping("/api/v1")
public class ProductController {

    @ApiOperation(httpMethod = "GET", 
                  value = "Retrieves reesults based on specific values set in the request parameters.", 
                  notes = "Sends back query results in JSON format after being processed.", 
                  produces = "application/json")
    @ApiResponses(value = { 
                        @ApiResponse(code = 200, message = "Successful GET command", response = …
Run Code Online (Sandbox Code Playgroud)

java swagger swagger-ui springfox

2
推荐指数
1
解决办法
1万
查看次数

如何向 SpringFox 生成的 Swagger json 添加自定义字段?

我正在尝试将该字段添加externalDocs到Springfox生成的 Json 中

"externalDocs": {
    "description": "find more info here",
    "url": "https://swagger.io/about"
},
Run Code Online (Sandbox Code Playgroud)

阅读 SpringFox 文档,我明白我需要创建一个plugin来扩展 SpringFox 功能并添加这个字段。我试过:

@Component
@Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1002)
@Slf4j
public class ExternalDocSwaggerConfiguration implements ApiListingBuilderPlugin {

    @Override
    public void apply(final ApiListingContext apiListingContext) {

        ObjectVendorExtension ext = new ObjectVendorExtension("externalDocs");
        ext.addProperty(new StringVendorExtension("description", "Link externo"));
        ext.addProperty(new StringVendorExtension("url", "https://swagger.io/about"));
        apiListingContext.apiListingBuilder().extensions(
            Collections.singletonList(ext)); // extensions does not exist
    }

    @Override
    public boolean supports(final DocumentationType documentationType) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待添加扩展名,如显示这里OperationBuilderPlugin,但是没有extensions方法上 …

swagger springfox

2
推荐指数
1
解决办法
1869
查看次数

Spring Webflux 注释的休息控制器不支持 ServerHttpRequest 作为方法参数:java.lang.NoSuchMethodException

打包为 war 的 Spring Boot 2.1.0/1 应用程序不支持ServerHttpRequest作为 Rest Controller 中的输入参数,例如:

@GetMapping(produces = APPLICATION_JSON_UTF8_VALUE)
public Flux<Event> findAll(ServerHttpRequest request) {
    return eventService.findAll();
}
Run Code Online (Sandbox Code Playgroud)

日志:

java.lang.IllegalStateException: No primary or default constructor found for interface org.springframework.http.server.reactive.ServerHttpRequest
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:219) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:84) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:139) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:126) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:166) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) [spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) [spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) [servlet-api.jar:na]
    at …
Run Code Online (Sandbox Code Playgroud)

spring spring-boot springfox spring-webflux

2
推荐指数
1
解决办法
3433
查看次数

Spring Boot 应用程序,已弃用 swagger-ui ApiInfo() 方法。需要替代方案

我有一个 Spring Boot 应用程序,它使用 swagger-ui 来公开它的 api。现在,直到我使用 springfox-swagger-ui 版本 2.6.1 为止,我的代码都可以正常工作。但是当我将版本更新到 2.7.0 时,它会抛出一个错误,指出 ApiInfo 方法已被弃用。谁能告诉我一个替代方案,它将尽可能少地修改现有代码并成功运行应用程序,并且信息仍然存在于 Swagger UI 中作为描述。我在这里给出了 swagger 配置的现有代码......

@Configuration
@EnableSwagger2
public class SwaggerConfig {
   @Bean
   public Docket productApi() {

       return new Docket(DocumentationType.SWAGGER_2)
              .useDefaultResponseMessages(false)
              .select()          
              .apis(RequestHandlerSelectors.basePackage("com.xyz.abc"))
              .paths(regex("/api.*"))
              .build()
              .apiInfo(apiInfo());
  }

  private ApiInfo apiInfo() {
      return new ApiInfo(
              "My-Project Api",
              "Api for My Project",
              "V1",
              "NA terms of service url",
              new Contact("Team Name", "www.somexyzteamcontact.com, "NA"),
              "A license given",
              "NA");
  }
}
Run Code Online (Sandbox Code Playgroud)

以及我在我的项目中使用的 swagger 的 gradle 依赖项:

compile group: 'io.springfox', name: …
Run Code Online (Sandbox Code Playgroud)

java spring swagger spring-boot springfox

2
推荐指数
1
解决办法
4970
查看次数

Springfox 3:从 ResponseMessage 迁移到 Response 以覆盖错误消息

Springfox 3开始,ResponseMessage已被弃用,我们应该使用Response来代替。

如何正确从ResponseMessage迁移到Response以覆盖默认响应错误消息?

这是我要迁移的 springfox 2.9.2 兼容代码的示例:

private static ResponseMessage responseMessageFor401() {
        return new ResponseMessageBuilder()
                .code( 401 )
                .message( "ERROR_MESSAGE_401" )
                .responseModel( new ModelRef( "StatusWrapper" ) )
                .build();
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

springfox

2
推荐指数
1
解决办法
1943
查看次数

当 WebMvcConfigurationSupport 存在时,不会生成 Swagger UI

我正在尝试在我的 Spring Boot 项目中生成 Swagger UI。JSON API 文档已生成,但 Swagger UI 没有生成,至少当我输入 swagger ui 地址时得到 404。我的依赖项:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>3.0.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

但是,当我删除此配置(并且不执行其他操作)时:

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {

    @Override
    protected void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new SomeEnumConverter());
        registry.addConverter(new AnotherEnumConverter());
    }
}
Run Code Online (Sandbox Code Playgroud)

Swagger UI 可以工作。Swagger UI 转换器有问题吗?有解决该问题的方法吗?

java rest swagger-ui spring-boot springfox

2
推荐指数
1
解决办法
1217
查看次数

Swagger - 设置响应的默认媒体类型或接受标头

我正在设置我的 API 来为 POST 请求生成 JSON 和 XML,并使用以下 Spring Boot 代码:

@PostMapping(
    consumes = { APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE },
    produces = { APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE }
)
public Game create(
        @Valid @RequestBody Game request,
        BindingResult bindingResult
) .../
Run Code Online (Sandbox Code Playgroud)

这工作正常,我可以选择 JSON 或 XML 作为media-typeSwagger 中的,但我希望默认字段为 JSON - 目前它始终是XML:

在此输入图像描述

我怎样才能实现这个目标?

java swagger spring-boot springfox

2
推荐指数
1
解决办法
3091
查看次数

类型 javax.servlet.http.HttpServletRequest 不存在,gradle springfox-swagger2: 3.0

我正在尝试在我的 Spring Boot 项目中实现 swagger。我在网上搜索了一下,发现springfox 3.0可能与spring boot 3.0不兼容。我也尝试过旧版本。但我无法做到这一点。我正在使用gradle

终端错误

在此输入图像描述

构建.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.0.1'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'practice.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '19'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation("io.springfox:springfox-swagger2:3.0.0")
}

tasks.named('test') {
    useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)

主java文件

package practice.example.crud_practice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@EnableSwagger2
@RestController
public class …
Run Code Online (Sandbox Code Playgroud)

java spring-boot springfox swagger-3.0

2
推荐指数
1
解决办法
5698
查看次数

端点按资源大笔标注进行分组?

我将Spring用于我的REST API开发。我有一些端点很多的API。当我打开swagger ui时,它看起来很拥挤。

我刚刚读了这篇文章,发现可以根据资源级别对端点进行分组。

我只想知道如何使用Spring的大笔注解来实现。我很高兴有人可以举例说明。

而且我只是想知道我们是否可以重新分组(较高级别的分组)以上述方式得出的分组?

api rest spring swagger springfox

1
推荐指数
1
解决办法
2746
查看次数

如何使用Spring Boot设置SpringFox以显示Rest API的两个(或更多)版本?

我试图弄清楚如何使用Spring Fox管理两个(或更多)API端点版本。

要对API进行版本控制,我正在通过内容协商使用版本控制,也称为使用Accept标头的版本控制。使用标头信息分别控制每个端点的版本。例如,对于第一版,我使用属性produces

@Override
@PostMapping(
        produces = "application/vnd.company.v1+json")
public ResponseEntity<User> createUser(
Run Code Online (Sandbox Code Playgroud)

对于第二版,我使用:

@Override
@PostMapping(
        produces = "application/vnd.company.v2+json",
        consumes = "application/vnd.company.v2+json")
public ResponseEntity<User> createUserVersion2(
Run Code Online (Sandbox Code Playgroud)

我不使用consumes第一个(v1)版本,因此如果客户端仅application/json在通话中使用,则默认情况下将调用第一个版本。

我想在Swagger UI上显示两个版本。怎么做?

spring swagger spring-boot springfox

1
推荐指数
1
解决办法
848
查看次数