小编Vla*_*ier的帖子

使用 Spring 重命名 swagger 中的 API

据我了解,在 Spring 中使用 Swagger 记录 API 时,我可以通过添加注释来更改 API 的描述@Api,但是当我按如下方式添加时

@Api(value= "NEW_NAME", description="NEW_DESCRIPTION")
Run Code Online (Sandbox Code Playgroud)

仅更改了描述,未更改名称。

如这里所见

在此输入图像描述

此外,我不确定默认名称和描述来自哪里,在添加 API 之前,名称似乎是从控制器名称派生的,但描述;对我来说,这看起来很自然,很人性化,几乎就像带有大写字母和所有内容的硬编码字符串。我对代码进行了搜索,但找不到这些字符串。Swagger 从哪里获取这些值?

谢谢

swagger spring-boot springfox

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

在 OpenAPI 规范定义中使用工件版本号

我有一个 Maven 项目,其中的 API 定义使用 OpenaAPI v3 规范。

我使用 openapi-generator-maven-plugin 生成代码,一切正常。我还可以访问 swagger-ui 并查看和测试我的 API。

问题是我不想两次维护版本号。因此,我想在 api 规范中引用我的 maven pom 中的版本号,而不是冒着过时风险进行复制。

我尝试过maven资源过滤,这似乎有效。由于当我将版本字段放入规范中时,目标文件夹中的 yaml 文件会被很好地替换${project.version},但是当我打开 swagger-ui 时,它会按字面意思打印“${project.version}”而不是实际版本。

这是我的 pom 中的插件配置:

<build>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>true</filtering>
        </resource>
      </resources>
      <plugins>
        <plugin>
          <groupId>org.openapitools</groupId>
          <artifactId>openapi-generator-maven-plugin</artifactId>
          <version>${openapi-generator-maven-plugin.version}</version>
          <executions>
            <execution>
              <goals>
                <goal>generate</goal>
              </goals>
              <configuration>
                <inputSpec>${project.build.resources[0].directory}/spec.yml</inputSpec>
                <ignoreFileOverride>${project.build.resources[0].directory}/.openapi-codegen-ignore</ignoreFileOverride>
                <language>spring</language>
                <library>spring-boot</library>
                <configOptions>
                  <!-- Use the newer java.time package instead of outdated java.util-->
                  <dateLibrary>java8</dateLibrary>
                </configOptions>
                <apiPackage>${default.package}.api</apiPackage>
                <modelPackage>${default.package}.model</modelPackage>
                <invokerPackage>${default.package}.invoker</invokerPackage>
                <generateApiTests>false</generateApiTests>
              </configuration>
            </execution>
          </executions>
       </plugin>
       ...
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

这是我的spec.yml:

openapi: 3.0.0
info: …
Run Code Online (Sandbox Code Playgroud)

maven swagger swagger-ui openapi openapi-generator

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

如何避免很多if else条件

我已经阅读了很多关于代码重构和避免if else语句的主题.实际上,我有一个班级,我使用了很多if - else条件.

private static String getXSIType(String fieldType) {
    if ("_freeFormText".equals(fieldType) || "_eMailAddress".equals(fieldType) || "_help".equals(fieldType)
            || "_hyperlink".equals(fieldType) || "_inlineText".equals(fieldType) || "_longText".equals(fieldType)
            || "_password".equals(fieldType) || "_phoneNumber".equals(fieldType) || "_richText".equals(fieldType)
            || "_textArea".equals(fieldType)) {

        return "platformCore:StringCustomFieldRef";

    } else if ("_integerNumber".equals(fieldType)) {
        return "platformCore:LongCustomFieldRef";

    } else if ("_multipleSelect".equals(fieldType)) {
        return "platformCore:MultiSelectCustomFieldRef";

    } else if ("_document".equals(fieldType) || "_listRecord".equals(fieldType) || "_image".equals(fieldType)) {
        return "platformCore:SelectCustomFieldRef";

    } else if ("_currency".equals(fieldType) || "_decimalNumber".equals(fieldType)
            || "_percent".equals(fieldType)) {
        return "platformCore:DoubleCustomFieldRef";

    } else if ("_checkBox".equals(fieldType)) {
        return "platformCore:BooleanCustomFieldRef";

    } else if ("_date".equals(fieldType) …
Run Code Online (Sandbox Code Playgroud)

java xml if-statement netsuite conditional-statements

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

Quarkus + Swagger UI + Keycloak

我想对 Quarkus 生成的 Swagger UI 使用 Keycloak 身份验证。这是我在 application.properties 中的配置:

quarkus.swagger-ui.oauth2-redirect-url=http://localhost:8080/q/swagger-ui/oauth2-redirect.html
quarkus.smallrye-openapi.security-scheme=oidc
quarkus.smallrye-openapi.security-scheme-name=Keycloak
quarkus.smallrye-openapi.oidc-open-id-connect-url=http://localhost:8888/auth/realms/myrealm/.well-known/openid-configuration
quarkus.swagger-ui.oauth2-redirect-url=http://localhost:8080/q/swagger-ui
Run Code Online (Sandbox Code Playgroud)

我的 REST 控制器注释如下:

@Path("/my-path")
@Authenticated
@SecurityRequirement(name = "Keycloak")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MyController {

    @GET
    public List<MyObject> listAll() {
       // [...]
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我单击 Swagger 中的“授权”按钮时,我不会被重定向到 Keycloak 登录页面,而是会看到一个弹出窗口,其中包含所有不同的可用授权:

在此输入图像描述

我无法使用其中任何一个,因为我的 Keycloak 不允许直接授予

如何实现重定向登录?这可能吗?

额外问题:为什么 swagger 属性在 IntelliJ 中显示为未使用?

在此输入图像描述

swagger openid-connect quarkus

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

如何在Swagger中为无法访问的控制器记录其他模型?

我有一个控制器,必须通过使其接受Stringas @RequestBody并返回String 来保持通用性,即String processRequest(@RequestBody String json) {...}

我无法控制该控制器的源代码,但可以通过编程来实现。

这会在传递和返回的真正对象是在一系列的请求消息的其他地方定义:RequestMessage1.javaRequestMessage2.java,等反应同样是:Response1.javaResponse2.java1

该控制器还插手这些请求的处理,以一个Processor看起来是这样的(Request1Processor.javaResponse1 process(RequestMessage1 message)

我的问题是这个。

有没有一种方法可以配置swagger,使其公开REST控制器类的终结点,即processRequest,但将所有这些Processor类及其输入和输出显示为该控制器的文档?

作为文档的一部分,我看到了添加“不可达”模型的功能。我尝试了像这样的文档中的方法:

@Autowired
private TypeResolver typeResolver;

@Bean
public Docket api() {
  return new Docket(DocumentationType.SWAGGER_2)
      .select()
      .apis(RequestHandlerSelectors.any())
      .paths(PathSelectors.any())
      .build()
      .additionalModels(typeResolver.resolve(Date.class));
}
Run Code Online (Sandbox Code Playgroud)

但是,附加的Date模型没有显示在swagger-ui.html中。

我在这里做错了什么?

此外,是否有办法以某种方式显示RequestMessage1类型将对做出响应Response1

java swagger spring-boot springfox

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

如何实现StringBuilder以避免不可变的字符串分配问题?

如何StringBuilder实现以避免不可变的字符串分配问题?

StringBuilder aliasA = new StringBuilder("a");
StringBuilder dot = new StringBuilder(".");
Clausula clause1 = new Clausula(aliasA.append(dot).append("id").toString());
Clausula clause2 = new Clausula(aliasA.append(dot).append("name").toString());
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder

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