怎样在 Azure 应用服务中生成和部署 Java API 应用
先决条件
使用 Swagger.IO 创建 API 基架
使用 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": {
"": {
"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": {
"": {
"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 编辑器。在该位置,单击“文件”->“粘贴 JSON”菜单项。
- 粘贴前面复制的联系人列表 API Swagger JSON。
- 查看编辑器中显示的文档页和 API 摘要。
- 择“生成服务器”->“JAX RS”菜单选项,创建服务器端代码的基架,稍后要编辑该代码来添加模拟实现。
- 生成代码后,系统会提供要下载的 ZIP 文件。此文件包含 Swagger 代码生成器创建了基架的代码,以及所有关联的生成脚本。将整个库解压缩到开发工作站上的某个目录。
编辑代码以添加 API 实现
在本部分,将 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(, "Barney Poland", "barney@contoso.com"));
list.add(new Contact(, "Lacy Barrera", "lacy@contoso.com"));
list.add(new Contact(, "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=; i<list.size(); i++)
{
if(list.get(i).getId() == id)
{
ret = list.get(i);
}
}
return Response.ok().entity(ret).build();
}
}- 打开命令提示符,将目录切换到应用程序的根文件夹。
- 执行以下 Maven 命令生成代码,然后在本地使用 Jetty 应用服务器运行该代码。
mvn package jetty:run
- 应会在命令窗口中看到 Jetty 已经在端口 8080 上启动代码。
- 使用 Postman 对 http://localhost:8080/api/contacts 中的“get all contacts”API 方法发出请求。
- 用 Postman 对 http://localhost:8080/api/contacts/2 中的“get specific contact”API 方法发出请求。
- 最后,在控制台中执行以下 Maven 命令来生成 Java WAR(Web 存档)文件。
mvn package war:war
- 生成的 WAR 文件将放入 target 文件夹。导航到 target 文件夹,然后将 WAR 文件重命名为 ROOT.war。(请确保大小写符合此格式)。
rename swagger-jaxrs-server-1.0..war ROOT.war
- 最后,从应用程序的根文件夹执行以下命令创建 deploy 文件夹,用于将 WAR 文件部署到 Azure。
mkdir deploy
mkdir deploy\webapps
copy target\ROOT.war deploy\webapps
cd deploy
考虑到篇幅问题,有兴趣的朋友可以通过这个链接来查看后续步骤。
怎样在 Azure 应用服务中生成和部署 Java API 应用的更多相关文章
- Azure 应用服务中的 API 应用、ASP.NET 和 Swagger 入门
学习内容: 如何通过 Visual Studio 2015 中的内置工具在 Azure 应用服务中创建和部署 API 应用. 如何使用 Swashbuckle NuGet 包动态生成 Swagger ...
- Azure应用服务+Github实现持续部署
上次我们介绍了如何使用Azure应用服务(不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序).我们通过Visual studio新建一个项目后手动编译发布代码.然后通过F ...
- 【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate('oauth-bearer', {session: false})
问题描述 在前两篇博文中,对NodeJS Express应用 使用MSAL + AAD实现用户登录并获取用户信息,获取Authorization信息 ( ID Token, Access Token) ...
- 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...
- 【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php
问题描述 参考官方文档部署 PHP Laravel 项目到App Service for Linux环境中,但是访问应用时候遇见了500 Server Error 错误. 从部署的日志中,可以明确看出 ...
- 【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
问题定义 使用Azure应用服务(App Service),部署Java应用,使用Tomcat容器,如何自定义错误页面呢?同时禁用DELETE, PUT方法 解决办法 如何自定义错误页面呢?需要在 J ...
- 【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
问题描述 如何在一个AppService下同时部署运行多个Java 应用程序呢? 问题解答 因为App Service的默认根目录为 wwwroot.如果需要运行多个Java 应用程序,需要在 www ...
- 为 Azure 应用服务配置连续部署工作流
本快速入门介绍了如何将应用服务 GitHub 集成以实现连续部署工作流.在本教程中完成的所有操作均符合1元试用条件. 本快速入门介绍了如何将应用服务 GitHub 集成以实现连续部署工作流.在本教程中 ...
- 【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
编写Java Spring Boot应用,通过配置logging.path路径把日志输出在指定的文件夹中. 第一步:通过VS Code创建一个空的Spring Boot项目 第二步:在applicat ...
随机推荐
- linux网络流量实时监控工具之iptraf 【个人比较喜欢用的流量监控软件】
linux网络流量实时监控工具之iptraf IPTraf是一个网络监控工具,功能比nload更强大,可以监控所有的流量,IP流量,按协议分的流量,还可以设置过滤器等,如下图 对监控网络来说,这个更适 ...
- “全栈2019”Java第一章:安装JDK11(Mac)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 文章原文链接 “全栈2019”Java第一章:安装JDK11(Mac) 下一章 “全栈2019”Java ...
- netcat 工具传输文件
因为电脑本地是 windows,多台机器间以 windows 为中介传输文件极度不爽.window 下的 MobaXterm 工具不能使用 sz 和 rz 命令, 而 SecureCRT 工具使用体验 ...
- 【文文殿下】Manache算法-学习笔记
Manache算法 定义:是一个判断回文子串的算法,我们结合例题解释: 题目:给定一个长度为 n 的字符串 S,求其最长回文子串 一个字符串是回文的,当且仅当反转后的串与原串完全相等 分析:对于这个题 ...
- WiFi安全那些事儿,整理推荐~
即使你安装了防火墙,不连接任何WIFI和热点,不在任何不受信任的网站下载东西,及时清理缓存和个人敏感信息,你相信吗?你的个人隐私仍然可能被泄露出去! 基础篇: 推荐1 谁出卖了你 << ...
- 爬虫4:re库
一. 常见匹配模式 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字下划线 \s 匹配任意空白字符,等价于 [\t\n\r\f]. \S 匹配任意非空字符 \d 匹配任意数字, ...
- 回归到jquery
最近在做一个公司的老产品的新功能,使用原来的技术框架,jquery和一堆插件,使用jquery的话,灵活性是有了,但是对于一个工作了3年多的我来说,很low,没什么成就感,技术本身比较简单,但是业务的 ...
- Asp.net的生命周期之页生命周期
参考:http://msdn.microsoft.com/zh-cn/library/ms178472%28v=vs.100%29.aspx http://msdn.microsoft.com/zh- ...
- POJ 2196
#include <iostream> using namespace std; int sum_10; int sum_12; int sum_16; int fun_10(int nu ...
- FlowPortal-BPM——创建新模块
一.设置webconfig (1)数据源设置 添加所有所用到数据库 (2)修改企业信息 二.Main.ashx——添加新的功能选项卡 new { id = "EXECUTE", t ...