JFinal整合Swagger

jfinal使用swagger的极简插件

码云地址:https://gitee.com/wenhaofan/JFinalSwagger

借鉴于:https://gitee.com/leeckent/jfinal-swagger/

个人站:http://www.wenhaofan.com/article/20190304101839

JFinalSwagger使用说明

Demo:https://gitee.com/wenhaofan/JFinalSwaggerDemo

1. 引入

    <dependency>
        <groupId>live.autu</groupId>
        <artifactId>jfinal-swagger</artifactId>
        <version>1.0.0</version>
    </dependency>

2. 下载 swagger-ui-master 将 dist 中文件加入到项目中

可配置成类似如下路径:
    webapp
        static
            swagger
                favicon-16x16.png
                ...
                swagger-ui.js.map
    WEB-INF
        views
            swagger
                index.html

3. 增加Swagger路由控制

    以第二步的形式配置的目录结构,可直接使用如下路由配置

    routes.add(new SwaggerRoutes());

    也可自行配置路由信息

    public class SwaggerRoutes extends Routes {

        @Override
        public void config() {
            setBaseViewPath("/WEB-INF/views");
            add("/swagger", SwaggerController.class);
        }

    }

4. 参数配置

  @Override
    public void configPlugin(Plugins me) {
    me.add(new SwaggerPlugin());
  }

添加配置文件 :swagger.txt

  basePath=/
  host=127.0.0.1:8080
  version=2.0
  info.description=测试jfinal swagger
  info.version=1.0
  info.title=测试

喜欢代码配置也可以使用代码配置

 @Override
    public void configPlugin(Plugins me) {
        me.add(new SwaggerPlugin(new SwaggerDoc().setBasePath("/").setHost("127.0.0.1").setSwagger("2.0")
                .setInfo(new SwaggerApiInfo("jfinal swagger demo", "1.0", "jfinal swagger", ""))));
    }

配置undertow.txt

添加

undertow.hotSwapClassPrefix=live.autu.plugin.jfinal.swagger

如过有多个Prefix则以 , 分隔

5. 添加注解

    提供五种注解,使用方式与swagger-annotation一致:

    @Api

    @ApiOperation

    @Param

    @ApiImplicitParams

    @ApiImplicitParam

    更多注解支持持续更新中

注解使用示例:

@Api(tags = "test", description = "测试")public class BlogController extends Controller {    @ApiOperation(tag = "index", httpMethod = RequestMethod.GET , description = "测试")    @ApiImplicitParams({            @ApiImplicitParam(name = "id", description = "编号", required = true, dataType = "Long"),            @ApiImplicitParam(name = "name", description = "姓名", required = true, dataType = "String")    })    public void test() {        renderJson(list);    }}

6.说明

该插件会自动读取Route配置以及@ActionKey所以无需配置url

评论区

JFinal

2019-03-01 20:56

简单清晰的 JFinal 整合 Swagger,感谢分享

wumugulu

2019-03-04 12:03

prelove

2019-03-04 15:39

tag → tags, httpMethod → methods ?

正负余

2019-03-04 16:17

@prelove 是的 略微有一点差别

GSir

2019-03-04 21:45

有demo工程吗?

正负余

2019-03-05 09:42

@GSir 现在在单独搞一个ui 写完了会一起分享出来,跟着使用说明来操作完全没问题的

goodhans

2019-03-05 11:44

java.lang.ClassCastException: live.autu.plugin.jfinal.swagger.config.SwaggerPlugin cannot be cast to com.jfinal.plugin.IPlugin
at com.jfinal.core.Config.startPlugins(Config.java:118)
at com.jfinal.core.Config.configPluginWithOrder(Config.java:71)
at com.jfinal.core.Config.configJFinal(Config.java:56)
at com.jfinal.core.JFinal.init(JFinal.java:61)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:63)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:111)
at io.undertow.servlet.core.ManagedFilter.createFilter(ManagedFilter.java:80)
at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:589)
at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:554)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:596)
at com.jfinal.server.undertow.UndertowServer.configHttp(UndertowServer.java:277)
at com.jfinal.server.undertow.UndertowServer.doStart(UndertowServer.java:255)
at com.jfinal.server.undertow.UndertowServer.start(UndertowServer.java:152)
at com.jfinal.server.undertow.UndertowServer.start(UndertowServer.java:81)
at com.smart.SmartApiConfig.main(SmartApiConfig.java:51)

GSir

2019-03-05 12:25

@正负余 ok,多谢大佬

正负余

2019-03-05 12:47

@goodhans 清除下缓存试试

goodhans

2019-03-05 12:57

undertow.hotSwapClassPrefix=live.autu.plugin.jfinal.swagger

goodhans

2019-03-05 12:57

@正负余,undertow.hotSwapClassPrefix=live.autu.plugin.jfinal.swagger

正负余

2019-03-05 13:02

@goodhans 你undertow是什么版本的,我记得undertow1.4把这个给解决了

goodhans

2019-03-05 15:42

@正负余 ,我用的是jfinal-undertow-1.5

正负余

2019-03-05 16:54

@goodhans 这样啊 问了下波总好像也只能这样配置了

正负余

2019-03-05 17:15

@goodhans 感谢反馈

正负余

2019-03-06 09:32

@GSir 使用swagger官方ui的demo好了 https://github.com/wenhaofan/JFinalSwaggerDemo

GSir

2019-03-06 10:20

@正负余 666,多谢大神

GSir

2019-03-06 13:06

@正负余 demo好像execute没有出来api调用结果?

kimble

2019-03-06 13:56

Exception in thread "main" java.lang.NoSuchMethodError: com.jfinal.kit.PropKit.appendIfExists(Ljava/lang/String;)Lcom/jfinal/kit/Prop;已经配置了,现在出现这个?

正负余

2019-03-06 16:36

@kimble 可以参考下demo https://github.com/wenhaofan/JFinalSwaggerDemo

新知

2019-10-28 17:06

怎么打开swagger-ui.html 这个页面

onlyglume

2019-12-18 20:25

jfinal swagger
1.0
[ Base URL: 127.0.0.1/ ]/swagger/api
jfinal swagger demo
No operations defined in spec!

集成后,怎么没有接口文档

程序员是真的雷

2019-12-24 11:12

@onlyglume 同一个问题,网上全是springboot的,根本没有jfianl的解决方法

程序员是真的雷

2019-12-24 11:40

尝试了n种办法,还是没有解决No operations defined in spec!,我选择使用springboot

正负余

2019-12-30 13:04

@程序员是真的雷 不好意思现在才看到,试试运行这个demo呢 ,导出后直接运行,https://gitee.com/wenhaofan/JFinalSwaggerDemo

热门分享

扫码入社