`binder-swagger-java` 是一套简易的 API 管理方案。它可以生成 swagger ui 可以浏览、交互的 API,还可以自动为没有实现的接口/操作生成数据和响应。
我们在类的静态块中定义 API 元数据信息,在类扫描/加载时,这些数据被收集到一个全局的 swagger 对象中,这样,当收到获取 swagger.json 的请求时,程序就可以用这个 swagger 对象直接响应了。
下载了项目源码以后,进入 example/java-jaxrs 目录
> mvn clean
> mvn jetty:run-war
然后浏览器打开:http://localhost:8002
就可以看到效果了 ^^
// in `PetResource.java` static Mapping petStatus = $(text(oneOf(Arrays.asList("available", "pending", "sold")))) .desc("pet status in the store").example("available").$$; static Mapping pet = $(mapping( field("id", $(vLong()).desc("pet id").example(gen("petId").or(gen(() -> faker.number().randomNumber()))).$$), field("name", $(text(required())).desc("pet name").$$), field("category", attach(required()).to($(mapping( field("id", vLong(required())), field("name", text(required())) )).refName("category").desc("category belonged to").$$)), field("photoUrls", $(list(text())).desc("pet's photo urls").example(Arrays.asList("http://example.com/photo1")).$$), field("tags", $(list(text())).desc("tags for the pet").example(Arrays.asList("tag1", "tag2")).$$), field("status", petStatus) )).refName("pet").desc("pet info").$$; static SharingHolder sharing = sharing().pathPrefix("/pet").tag("pet"); static { sharing.operation(GET, "/{petId}") .summary("get pet by id") .parameter(param(longv()).in("path").name("petId").example(1l)) .response(200, response(pet)) .response(404, response().description("pet not found")) .notImplemented() // MARK IT `notImplemented`, THEN `binder-swagger-java` WILL GENERATE MOCK RESPONSE FOR YOU ; } @GET @Path("/{petId}") public Response getPetById(@PathParam("petId") String petId) throws NotFoundException, SQLException { ...
0. 把 binder-swagger-java 依赖加入项目
1. (如上)定义/注册你的 API 操作
2. 补充其他 swagger info
3. 在 web.xml 里配置 SwaggerFilter
就这样,可以用了。
Q: 为什么使用静态代码块而不是注释来注册/关联操作的元数据信息?
A:因为注释不能满足需求,注释要求静态定义的数据类型,而我们的项目很多按需生成的数据没有定义 Java Bean。
--------------------------------------------------
更多细节请访问项目网站。
binder-swagger-java v0.6.1 发布了,是 Swagger API 框架。 改进内容: 主要修复了一个 ref-model 的 bug:在 request/response 里引用了已定义的 model 后,输出 swagger.json 的 paths 部分包含的仍然是完整的 model 定义,而不是 $ref: #definitions/xxxModel这样的引用描述。
Binder-swagger-java v0.5.0 发布了,这一版的主要更新有: 增加 ref 支持 增加 重用 支持 更多的助手方法 注:保持了向前兼容,现有应用代码不受影响。 只要提供合适的 swagger.json,swagger ui 就能动态生成 web 客户端,让你可以在线浏览 API,构建/发送请求并获得响应。 Binder-swagger-java 的目的就是帮助构建 sw
本文来自GitHub 上 Awesome - java 系列的资源整理。 awesome-java是 akullpp 发起维护的 Java 资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码分析、日志、第三方库、书籍、Java 站点等等。 目录 Java资源大全中文版 古董级工具 构建工具 字节码操作 集群管理 代码分析 编译器生成工具 外部配置工具 约束满足问题求解程序 持续集成 CS
Java资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。awesome-java 就是 akullpp 发起维护的 Java 资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码分析、日志、第三方库、书籍、Java 站点等等。伯乐在线已经把 awesome-java 资源列表翻成中文后发布于 ImportNew。 Awesome
1,出现问题 Failed to start bean ‘outputBindingLifecycle’; nested exception is java.lang.IllegalArgumentException: A default binder has been requested, but there is no binder available 解决办法 删掉这两个依赖 <depend
Binder Binder 主要有以下两个特征: 不会处理错误事件 确保绑定都是在给定 Scheduler 上执行(默认 MainScheduler) 一旦产生错误事件,在调试环境下将执行 fatalError,在发布环境下将打印错误信息。 示例 在介绍 AnyObserver 时,我们举了这样一个例子: let observer: AnyObserver<Bool> = AnyObserver
用法 对于使用RabbitMQ绑定器,您只需要使用以下Maven坐标将其添加到您的Spring Cloud Stream应用程序: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rabbit</artifactId> </dependency>
Property Binder 是一个 Java 类库,用来处理 properties 文件的,支持多值的key。可通过 Annotation 对 Properties 文件进行解析处理,例如下面代码: public interface ExamplePICA { String unadorned(); @BoundProperty("unconverted.property")
form-binder 是一个容易使用和定制的微型数据绑定和校验框架。 它有如下特点: 非常轻量,总共才 900 来行代码(框架 + 内置扩展) 容易使用,使用过程没有冗余代码,所见及所得 高度可定制,你可以扩展几乎每一个执行点 容易实现扩展,每个扩展接口都只是一个 FunctionN 的别名 不可变性,让你可以安全的共享/(嵌套)复用 mapping定义对象 form-binder 一开始是为我
用法 对于使用Apache Kafka绑定器,您只需要使用以下Maven坐标将其添加到您的Spring Cloud Stream应用程序: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-kafka</artifactId> </dependen
form-binder-java 是一个容易使用和定制的微型数据绑定和校验框架,是 form-binder 的 Java 移植版。用 Java 8 实现,运行时要求 Java 8。 它有如下特点: 非常轻量,总共才 1500 来行代码(框架 + 内置扩展) 容易使用,使用过程没有冗余代码,所见及所得 高度可定制,你可以扩展几乎每一个执行点 容易编写扩展,每个扩展接口都只是一个 FunctionN