现有环境: jfinal-2.0,jdk 1.8,集成swagger.
一、经过各种折腾,网上搜集,一开始集成jfinal-swagger,该项目位置:jfinal-swagger: jfinal 集成 Swagger 结果发现该项目没人维护不说,不支持返回值说明。
二、后又找到jfinal-swagger-knife4j项目,项目位置:jfinal-swagger-knife4j: JFinal集成Swagger
该项目实现了jfinal-knife4j的集成,默认使用@ApiRes注解,标注返回参数时,使用的是默认的框架中自定义的实体类,如想自定义返回实体,可使用@ApiResCustom 注解实现。
但该项目为jfinal-4.9,自己的项目中为jfinal-2.0,经过查看该项目源代码,锁定到的jfinal2.0中没有Engine类,经过各种搜索后,发现jfinal作者有一个enjoy项目,该项目和jfinal框架没有任何关系,可在spring中使用,不依赖jfinal框架,而这点正好补足了jfinal-2.0的不足,说到这里可能有读者想说,为什么不直接升级到jfinal-4.9,因为公司的项目是一个很老的项目,如果要该的话,估计会有很多改动,主要是leder不让改,外加各种公司环境的原因,不能改。所以想到的在jfina-2.0基础上外挂enjoy.jar包来解决集成jfinl-swagger-kenife4j这个开源项目。enjoy的项目地址:enjoy.
三、接下来说一下jfina-swagger-knife4j这个开源项目在集成过程中的坑。
有关swagger.properties文件中的问题。
1.basePath这个属性,如您当前的上下文是/ 则需要注释掉这个属性,否则当前请求的url会少一位。比如/zrr/user 会变成/rr/user。
2.contextPath这个属性,如您当前的上下文不是空,如加上当前项目的上下文,存在找不到资源文件问题,但是请求css等资源文件的http状态码为200,但是下载下来的文件是空的。解决办法,去掉所有上下文,使用/来作为当前项目上下文。有关这点可能存在疑点,后期进行验证。
3.有关无缘无故的NullpointerException问题,可能为用@ApiModel标记的实体类中存在没有使用@ApiModelProperty注解来标记的字段,则会出现该问题,解决办法:在该字段中使用@ApiModelProperty(hidden=true)即可解决问题。
致辞完成的jfinal-swagger-knife4j的整个集成过程,如有相关疑问,请留言。