使用 swagger.io 在线编辑器可以输入表示 API 结构的 Swagger JSON 或 YAML 代码。设计 API 外围应用后,可以针对各种不同的平台和框架导出代码。在下一部分,我们将修改基架代码,包含模拟功能。
本演示从粘贴到 swagger.io 编辑器中的 Swagger JSON 正文开始,接着使用该正文来生成利用 JAX-RS 访问 REST API 终结点的代码。然后,将编辑基架代码来返回模拟数据,以便模拟一个构建在数据持久性机制基础上的 REST API。
将以下 Swagger JSON 代码复制到剪贴板:
{ "swagger": "2.0", "info": { "version": "v1", "title": "Contact List", "description": "A Contact list API based on Swagger and built using Java" }, "host": "localhost", "schemes": [ "http", "https" ], "basePath": "/api", "paths": { "/contacts": { "get": { "tags": [ "Contact" ], "operationId": "contacts_get", "consumes": [], "produces": [ "application/json", "text/json" ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/Contact" } } } }, "deprecated": false } }, "/contacts/{id}": { "get": { "tags": [ "Contact" ], "operationId": "contacts_getById", "consumes": [], "produces": [ "application/json", "text/json" ], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "format": "int32" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/Contact" } } } }, "deprecated": false } } }, "definitions": { "Contact": { "type": "object", "properties": { "Id": { "format": "int32", "type": "integer" }, "Name": { "type": "string" }, "EmailAddress": { "type": "string" } } } } }
在本部分,将 Swagger 所生成代码的服务器端实现替换为自定义代码。新代码将 Contact 实体的 ArrayList 返回给调用方客户端。
使用 Visual Studio Code 或偏好的文本编辑器,打开位于 src/gen/java/io/swagger/model 文件夹中的 Contact.java 模型文件。
将以下构造函数添加到 Contact 类。
public Contact(Integer id, String name, String email) { this.id = id; this.name = name; this.emailAddress = email; }
使用 Visual Studio Code 或偏好的文本编辑器,打开位于 src/main/java/io/swagger/api/impl 文件夹中的 ContactsApiServiceImpl.java 服务实现文件。
使用新代码覆盖文件中的代码,将模拟实现添加到服务代码。
package io.swagger.api.impl; import io.swagger.api.*; import io.swagger.model.*; import com.sun.jersey.multipart.FormDataParam; import io.swagger.model.Contact; import java.util.*; import io.swagger.api.NotFoundException; import java.io.InputStream; import com.sun.jersey.core.header.FormDataContentDisposition; import com.sun.jersey.multipart.FormDataParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; @javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-24T21:54:11.648Z") public class ContactsApiServiceImpl extends ContactsApiService { private ArrayList<Contact> loadContacts() { ArrayList<Contact> list = new ArrayList<Contact>(); list.add(new Contact(1, "Barney Poland", "barney@contoso.com")); list.add(new Contact(2, "Lacy Barrera", "lacy@contoso.com")); list.add(new Contact(3, "Lora Riggs", "lora@contoso.com")); return list; } @Override public Response contactsGet(SecurityContext securityContext) throws NotFoundException { ArrayList<Contact> list = loadContacts(); return Response.ok().entity(list).build(); } @Override public Response contactsGetById(Integer id, SecurityContext securityContext) throws NotFoundException { ArrayList<Contact> list = loadContacts(); Contact ret = null; for(int i=0; i<list.size(); i++) { if(list.get(i).getId() == id) { ret = list.get(i); } } return Response.ok().entity(ret).build(); } }
mvn package jetty:run
mvn package war:war
rename swagger-jaxrs-server-1.0.0.war ROOT.war
mkdir deploy mkdir deploy\webapps copy target\ROOT.war deploy\webapps cd deploy
考虑到篇幅问题,有兴趣的朋友可以通过这个链接来查看后续步骤。