如何将 Swagger 无配置设置与 Jersey 2 集成

2024-01-26

我正在尝试使用 Tomcat 8.5 上托管的 Jersey 2 项目进行准系统 Swagger 设置。我首先使用 Jersey 入门指南中的以下代码片段生成了 Jersey 项目(https://jersey.github.io/documentation/latest/getting-started.html https://jersey.github.io/documentation/latest/getting-started.html):

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp
  -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false
  -DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example \
  -DarchetypeVersion=2.27

然后我添加了 swagger 入门指南中的 Swagger 依赖项(https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---入门 https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Getting-started):

<dependency>
  <groupId>io.swagger.core.v3</groupId>
  <artifactId>swagger-jaxrs2</artifactId>
  <version>2.0.0</version>
</dependency>
<dependency>
  <groupId>io.swagger.core.v3</groupId>
  <artifactId>swagger-jaxrs2-servlet-initializer</artifactId>
  <version>2.0.0</version>
</dependency>

当点击 api 时http://localhost:8080/simple-service-webapp/webapi/myresource http://localhost:8080/simple-service-webapp/webapi/myresource我得到了正确的回应。当我击中时http://localhost:8080/simple-service-webapp/webapi/openapi.json http://localhost:8080/simple-service-webapp/webapi/openapi.json我收到 404 Not Found。

有任何想法吗?

这是我的 pom 的样子:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>simple-service-webapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>simple-service-webapp</name>

<build>
    <finalName>simple-service-webapp</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <inherited>true</inherited>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
        <!-- artifactId>jersey-container-servlet</artifactId -->
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
    </dependency>
    <!-- uncomment this to get JSON support
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-binding</artifactId>
    </dependency>
    -->
    <dependency>
      <groupId>io.swagger.core.v3</groupId>
      <artifactId>swagger-jaxrs2</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>io.swagger.core.v3</groupId>
      <artifactId>swagger-jaxrs2-servlet-initializer</artifactId>
      <version>2.0.0</version>
    </dependency>
</dependencies>
<properties>
    <jersey.version>2.27</jersey.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

您仍然需要注册OpenAPI 资源 https://github.com/swagger-api/swagger-core/tree/26d72bf5fd2d54e5e514ddcf3861d125d2f95b42/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/resources。这些是提供 JSON 的 JAX-RS 资源类。由于您使用 web.xml 进行配置,因此您只需将 swagger 包添加到要扫描的包列表中即可。

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>
            com.example,
            io.swagger.v3.jaxrs2.integration.resources
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

注意我添加了io.swagger.v3.jaxrs2.integration.resources包到列表中,以逗号分隔。这将告诉 Jersey 扫描该包,它将发现并注册AcceptHeaderOpenApiResource https://github.com/swagger-api/swagger-core/blob/v2.0.0/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/resources/AcceptHeaderOpenApiResource.java#L17OpenApiResource https://github.com/swagger-api/swagger-core/blob/v2.0.0/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/resources/OpenApiResource.java#L18。两者的区别在于前者提供路径/openapi数据格式由Accept请求中的标头,后者提供路径/openapi.{type:json|yaml},其中数据格式由路径中的扩展名(.json 或 .yaml)确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Swagger 无配置设置与 Jersey 2 集成 的相关文章

随机推荐

  • MySQL“错误 1046 (3D000):更新查询时未选择数据库”

    我有一个 UPDATE 查询 其中明确引用了数据库 但 MySQL 仍然抱怨以下消息 ERROR 1046 3D000 No database selected 其他结构相似但使用 INSERT 的查询可以正常工作 其他仅执行 SELECT
  • Endpoint包含授权元数据,但未找到支持授权的中间件

    我目前正在将本地开发的应用程序迁移到数字海洋中的 Ubuntu 16 04 Droplet 我正在使用 NET Core 3 1 并已为其配置了我的服务器 但是 当我导航到控制器上使用 Authorize 属性 我仅在我的生产服务器上 而不
  • LINQ to XML 和 DataGridView

    您好 我第一次尝试使用 DataGridView 和 LINQ 这就是我正在尝试做的事情 我想使用它 尽管它不必使用 DataGridView 来读取和显示 XML 文件的内容 这部分是下面的工作代码 但我想在表单或 DataGridVie
  • 两个ArrayList 一个RecyclerView Adapter

    我有一个聊天屏幕 我可以在其中与其他用户聊天 我正在将聊天数据 通过列表的消息 时间和发件人 发送到 RecyclerAdapter 后者用数据填充聊天视图 现在我还有一个列表 其中包含不同布局的数据 像这样 这是我将第二个数组列表调用到
  • 使用 url 重定向下载文件

    我可以通过 url 下载文件 但是当我从 bash 尝试时 我得到的是 html 页面而不是文件 如何使用curl wget 或其他方式下载带有url 重定向 301 永久移动 的文件 UPD 来自 url 请求的标头 curl I htt
  • 使用命令提示符修改 cmd.exe 属性

    这不是很好的递归吗 我的外部驱动器上有一个便携式命令提示符 它有一个很好的 bat 文件来配置一些初始设置 但我想要更多 这是我知道如何从 bat 设置的内容 颜色 颜色 XY 其中 x 和 y 是预定义颜色的十六进制数字 Prompt p
  • ini_set("upload_max_filesize","200M") 在 php 中不起作用[重复]

    这个问题在这里已经有答案了 可能的重复 覆盖 upload max filesize https stackoverflow com questions 949415 overriding upload max filesize 我使用这些
  • 我需要一个循环遍历日期间隔

    我有开始日期和结束日期 我需要遍历这两个日期之间的每一天 最好的方法是什么 我只能建议这样的事情 Date currentDate new Date startDate getTime while true if currentDate g
  • xcode 无法识别类的更改

    由于某种原因 xcode 无法识别我对程序 这是一个 C 命令行程序 中的某个类所做的任何更改 例如 如果我为此类创建一个新方法并尝试在另一个文件中使用它 该文件已经包含该类的 h 文件 并且我已经在该文件中广泛使用了该类 它会给我一个错误
  • cassandra CQL 中的内连接

    如何在 cassandra 中编写子查询 嵌套查询 CQL 中是否提供了此功能 我尝试过的例子 cqlsh testdb gt select itemname from item where itemid select itemid fro
  • Docker compose找不到本地包

    因此 我在 GOlang 中创建了 REST api 和一个 grpc 服务 现在我想在 docker compose 中组合它 我的 docker compose 看起来像这样 version 3 services db image po
  • 在同一台计算机上运行 Internet Explorer 6、Internet Explorer 7 和 Internet Explorer 8

    和其他人一样 我需要在 Internet Explorer 6 和 Internet Explorer 7 上测试我的代码 现在 Internet Explorer 8 为开发人员提供了一些很棒的工具 我想使用它们 我还想开始使用 Inte
  • 在bat文件中查询npm错误状态

    我们目前正在将 UI 项目 总共 3 个 的构建转移到 Grunt 为了简化转换 我想提供一个可以运行的bat文件npm install对于每个项目 但是我想知道发出此命令时是否出现问题 我所追求的只是糖衣 我知道 npm 会回显错误 但我
  • psql: FATAL: 用户 PAM 身份验证失败

    PostgreSQL 9 2 4 我无法再使用过去工作过的用户登录 我假设配置有问题 因此 为了进行测试 我创建了一个测试用户角色 testing 其选项与相关角色相同 作为仍然可以登录的 postgres 用户 CREATE ROLE t
  • 如何在Python 2.7中实现带超时的锁

    有没有一种方法可以在Python中实现多线程锁acquire方法可以有任意超时吗 到目前为止我发现的唯一可行的解 决方案使用轮询 这 我觉得不优雅而且效率低下 不保留锁的有界等待 进度保证作为临界区问题的解决方案 有没有更好的方法来实现这个
  • IList 到 IQueryable

    我有一个列表 我想将其包装到 IQueryable 中 这可能吗 List
  • 使用 C# 进行 AES 加密 使用 crypto-js 进行解密

    我正在尝试使用 C 加密字符串并使用 Angular crypto js 库解密它 但它给了我不同的输出 我尝试了不同的 c aes 加密实现 但 crypto js 库无法解密 c 中的加密数据 感谢您的任何帮助 这是我的代码 程序 cs
  • 覆盖 DICOM 中的像素数据时应替换哪些 DICOM UID?

    我正在尝试从现有文件创建一个新的 DICOM 文件 实例 并在其中更改像素数据 我知道在替换像素数据时需要更改一些 UID 目前我正在生成SOPInstanceUID MediaStorageSOPInstanceUID and Refer
  • 将 HTML 字符串附加到 DOM

    如何附加 HTML 字符串 例如 var str p Just some span text span here p to the div 与身份证test Btw div innerHTML str 是不能接受的 Use insertAd
  • 如何将 Swagger 无配置设置与 Jersey 2 集成

    我正在尝试使用 Tomcat 8 5 上托管的 Jersey 2 项目进行准系统 Swagger 设置 我首先使用 Jersey 入门指南中的以下代码片段生成了 Jersey 项目 https jersey github io docume