Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让Swagger使用@ApplicationPath?

如何让Swagger使用@ApplicationPath?
EN

Stack Overflow用户
提问于 2018-02-21 18:43:16
回答 1查看 2.2K关注 0票数 1

swagger-jaxrs 1.5.18

我在@ApplicationPath("/docs")上有一个应用程序,在它下面有一个位于@Path("/mydocs")的资源。因此,真正的端点是/api/docs/mydocs,但在swagger.json中生成的是/api/mydocs。

所需的swagger url: /api/docs/mydocs

实际的swagger url: /api/mydocs

要使其正常工作,必须在应用程序中使用@ApplicationPath(""),在参考资料中使用@Path("/docs/mydocs"),但我不想像这样随意更改所有路径以使其与Swagger一起工作。

There's a ticket on swagger's github that has been resolved, but for some reason it doesn't work for me (I am using what I think is the latest.)

代码语言:javascript
运行
AI代码解释
复制
@ApplicationPath( "/docs" )
@Api( tags = "docs" )
public class DocsConfig extends Application {

    public DocsConfig() {
        BeanConfig beanConfig = new BeanConfig();
        beanConfig.setVersion( "1.0" );
        beanConfig.setSchemes( new String[]{ "http" } );
        beanConfig.setHost( "localhost:8080" );
        beanConfig.setBasePath( "/api" );
        beanConfig.setResourcePackage( "com.my.company" );
        beanConfig.setScan( true );
        beanConfig.setTitle( "MY API" );

    }

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new HashSet<>();
        resources.add( io.swagger.jaxrs.listing.ApiListingResource.class );
        resources.add( io.swagger.jaxrs.listing.SwaggerSerializers.class );
        resources.add( DocsResource.class );
        return resources;
    }
}

@Stateless
@Path( "/mydocs" )
@Api( value = "mydocs" )
public class DocsResource {

    @Context
    ServletContext servletContext;

    @Path( "/ui" )
    @GET
    public InputStream getFile() {
        //some stuff
    }
}

    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-jaxrs</artifactId>
        <version>1.5.18</version>
    </dependency>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 12:19:59

正如评论中提到的,仅在Swagger2.0中添加了对@ApplicationPath的支持。在Swagger 1.5中,您可以选择将应用程序路径包含在swagger配置的基本路径中(如@imTachu所述):

代码语言:javascript
运行
AI代码解释
复制
final String applicationPath = DocsConfig.class.getAnnotation(ApplicationPath.class).value();
beanConfig.setBasePath("/api" + applicationPath);

这将导致生成的YAML如下所示:

代码语言:javascript
运行
AI代码解释
复制
...
basePath: "/api/docs"
...
paths:
  /mydocs/ui:
...

或者,您可以编写一个ReaderListener,根据需要修改生成的Swagger:

代码语言:javascript
运行
AI代码解释
复制
@SwaggerDefinition
public class SwaggerBasePathModifier implements ReaderListener {

  @Override
  public void beforeScan(Reader aReader, Swagger aSwagger) {
    // do nothing
  }

  @Override
  public void afterScan(Reader aReader, Swagger aSwagger) {
    final Map<String, Path> newSwaggerPaths = new HashMap<>();
    final String applicationPath = DocsConfig.class.getAnnotation(ApplicationPath.class).value();
    for (final Map.Entry<String, Path> entry : aSwagger.getPaths().entrySet()) {
      final currKey = entry.getKey().substring("/api".length(), entry.getKey().length())
      final String newKey = "/api" + applicationPath + currKey;
      newSwaggerPaths.put(newKey, entry.getValue());
    }
    aSwagger.setPaths(newSwaggerPaths);
  }
}

这将导致生成的YAML中的每个路径都被修改。这就是你得到的:

代码语言:javascript
运行
AI代码解释
复制
...
basePath: "/api"
...
paths:
  /docs/mydocs/ui:
...

通过使用第一个选项,所有请求都将使用相同的基本路径/api/docs,而后一个选项允许您配置多个基本路径(例如,对于在同一应用程序中配置的多个JAX-RS服务器),并且更加灵活。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48913240

复制
相关文章
Dji Onboard SDK(边缘高性能SDK)
按照我的理解就是,行业机器本身就性能强劲,完全可以放一个高性能的计算机上去,比如Intel的NPC,英伟达的TX2等,进行空中的实时处理。这个过程中势必要使用一个中间层连接记载计算机和无人机,这个中间层就是我们的重点。
云深无际
2021/12/20
3.2K0
Dji Onboard SDK(边缘高性能SDK)
Android VideoView播放视频
起初播放本地视频也是如此,但后来发现是因为权限的原因,所以需要在AndroidManifest.xml中加入
SingYi
2022/07/13
3.5K0
Android VideoView播放视频
Android VideoView播放视频
Android 利用自带VideoView控件播放视频 Activity public class Activity01 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.
阳光岛主
2019/02/19
1.3K0
现成Sphinx实例(基于Dji SDK)
首先是一个image的这个标签,后面是一个相对路径..(.号是指当前路径是父级点从上方遍历),接着是一个属性align,对齐选择居中.
云深无际
2020/12/07
8160
现成Sphinx实例(基于Dji SDK)
Dji RoboMaster Tello SDK封装.2
对里面的控制命令的封装,最新的SDK又有了新的指令,我可能有没有封装到位的,可以自己去封装。下文会有安装的方法
云深无际
2021/03/30
7460
Dji RoboMaster Tello SDK封装.2
OpenGL ES for Android 播放视频
我们都知道Android中有VideoView控件可以直接播放视频,既简单又实用,那么为什么我们还要用OpenGL ES来播放视频呢?那是因为使用OpenGL ES可以做更多的酷炫的动效,比如旋转视频、双指缩放视频、视频的截图、视频的录制、直播、换脸,还有类似“激萌”App里面的特效等这些都是VideoView所无法实现的,而通过OpenGL ES则可以实现这些酷炫的效果,当然这篇文章不会介绍如何这些实现这些效果,如果想了解这些动效请关注我,后面的文章会一一介绍。
老孟Flutter
2020/09/11
1.4K0
android视频系列:视频解码篇--android上视频播放的实现
前言 要开始正儿八经地写视频系列文章了。思来想去,从播放器入手,再合适不过了。视频文件,只有播放出来,才显示出了意义;只有播放出来,才暴露出各种问题。先理解播放的场景,才能更好地理解视频处理时所选取的策略。 播放器做了什么 播放器播放视频,就是一步步剖开视频的内容,显示在屏幕上。 最简单的理解方式,是把视频文件看做一个容纳了很多图片的容器。播放时,从容器里取出一张图片,放到屏幕上显示,隔一点时间后,再从容器里取出下一张图,放到屏幕上。按次序把图片一张一张显示到屏幕上,等到最后一张也显示到屏幕上后,播放就完成
天天P图攻城狮
2018/02/02
4.1K0
android视频系列:视频解码篇--android上视频播放的实现
android采用videoView播放视频(包装)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117001.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
4380
Dji RoboMaster Tello SDK封装.4(打包,安装)
最后安装格式,你得写一个init得文件来完成SDK最后得编写 分别是包名,作者名字,授权方式,版权,版本,以及库中包含得文件 import setuptools with open('README.md', 'r') as fh: long_description = fh.read() setuptools.setup( name='easytello', version='0.0.9', author='yunswj', author_email='18247
云深无际
2021/03/30
8070
Dji RoboMaster Tello SDK封装.4(打包,安装)
大疆(Dji)SDK思路前的准备(上)
SDK(Software Development Kit),即软件开发工具包,用来开发适用于某个产品(比如 DJI Phantom 4)或某个平台(比如 Windows)的软件,通常由产品或平台的厂商提供给开发者使用。在这个工具包里通常包括各种各样的调试工具、API 文档、开发指南和模拟器。
云深无际
2020/11/19
2.3K0
大疆(Dji)SDK思路前的准备(上)
Dji RoboMaster Tello SDK封装.1(对视频接口使用cv2.VideoCapture接收))
首先导入一些编写SDK的一些必要的库 因为是无线的连接所以要加一个网络的线程库,用来连接TT 接着导入时间库,因为会有一些资源的监控函数 导入cv库,这里是cv2,因为底层是C++的实现 最后一个是另外一个资源的监控类 因为是打包SDK的指令,所以就写一个类就好 这里是已经封装好的一些指令 这里有的计算机是端口打开失败,这里的电脑是win10 这个是版本号 点击高级设置 新建一个入站的规则 选择端口 因为TT的通信方式都是UDP,所以这里UDP 允许所有,其实就8889就可以 都打开 写一些info,日后
云深无际
2021/03/30
1.2K0
Dji RoboMaster Tello SDK封装.1(对视频接口使用cv2.VideoCapture接收))
Dji Mavic Air无人机开发相关资料集合
最近在搞一个直播类的应用比赛,我的想法是做一个无人机的直播平台。然后我手边只有一个Air的机型了,所以找一下相关的资料,看看能不能做开发机
云深无际
2021/09/14
6170
Dji Mavic Air无人机开发相关资料集合
大疆无人机 MobileSDK(遥控器/手机端)开发 v4版<1>
刚刚结束了项目交付,趁热打铁分享一下这次遇到的新东西。首先了解一下大疆的无人机,它大致可以分为三级。
爱吃土豆丝的打工人
2023/10/14
8360
大疆无人机 MobileSDK(遥控器/手机端)开发 v4版<1>
破解Dji robomaster S1使用EP SDK
查看对象的属性,元类编程的时候有用。一般不自己写库基本上不会用到元类编程,__dict__的相对用途就小很多
云深无际
2021/09/14
3.2K2
破解Dji robomaster S1使用EP SDK
解决 Android PLMediaPlayer 视频播放异常小结
和尚最近一直在处理一个比较纠结的问题,项目中接入了七牛云视频SDK PLMediaPlayer,七牛云视频SDK是很强大的一款三方视频库。 和尚项目中需要展示的是 .mp4 格式的视频,曾经遇到的问题包括:个别视频有音频但是看不到视频,个别视频无法播放等。和尚查了好久发现对问题解决的资料相对较少,仅记录一下和尚处理的方式。
阿策小和尚
2019/08/12
1.7K0
解决 Android PLMediaPlayer 视频播放异常小结
学习|Android播放网络视频综合运用
随着生活节奏的增加,短视频已经开始慢慢替代公众号软文的情况了,就像我自己发的文章也会经常放一些自己剪辑的效果视频,所以这一篇我们就主要学习一下Andriod的App中怎么进行视频的播放。
Vaccae
2020/01/02
1.1K0
点击加载更多

相似问题

从google drive api检索文件元数据

10

迭代Team Drive文件Google Drive API JAVA

13

使用.net Google Drive api迭代google drive上的文件夹

13

Google Drive文件元数据读取

10

使用Google Drive API关联和搜索文档元数据

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档