在本文中,您将学习如何使用JAX-RS参考实现(Jersey)创建REST服务并将其部署在Google AppEngine上。

先决条件
对于本教程,您将需要:
  • Google AppEngine帐户
  • Eclipse Galileo(3.5.x)
  • 适用于Java的Google App Engine SDK
    • 按照此处所述安装Eclipse的Google插件(检查您是否正在使用GAE Java SDK的1.3.1版,如果未下载,请配置该插件以使用它)
    • 在本地拥有AppEngine文档也很有用,您可以从此处下载。
  • JAX-RS参考实现,请确保您采用Jersey 1.1.5版本。 您可以从这里下载。
    • 将文件解压缩到我们称为$ JERSEY_HOME的目录中
  • JAXB 2.2实现可简化XML的编组/解组,并简化JSON支持。 从这里下载
    • 使用java -jar JAXB2_20091104.jar命令安装它。 JAXB的安装目录将称为$ JAXB_HOME

创建新的应用程序

要在Eclipse中创建新的App Engine项目,请执行以下操作:

  1. 单击“新的Web应用程序项目”按钮 在工具栏中。 也可以使用菜单文件> Web应用程序项目来执行此操作
  2. 将打开“创建Web应用程序项目”向导:
  • 项目名称:EmployeeService
  • 打包:com.grallandco.employee.service
  • 取消选中“使用Google Web Toolkit”
  • 检查您使用的SDK版本是否为“ App Engine 1.3.0”; 如果没有配置项目以使用它。
  • 该屏幕应类似于以下屏幕:
  • 点击完成
  • 该项目应类似于以下屏幕:

运行应用程序

随Eclipse插件一起安装的App Egine SDK包含一个Web服务器(基于Jetty),可用于测试和调试。 要测试是否已正确创建应用程序,请选择菜单运行>运行方式> Web应用程序。 我大部分时间都使用调试命令运行>调试> Web应用程序运行服务器。 在调试模式下,您可以更改源代码,并且无需重新启动服务器即可进行测试。

Web服务器自动启动,您应该在Eclipse控制台中看到以下消息

服务器正在http:// localhost:8080 /上运行

您可以访问该应用程序以及使用以下URL创建的样本servlet:http:// localhost:8080 / employeeservice

要停止服务器,请单击终止按钮 在Eclipse控制台中。

在应用程序中配置REST支持

为了能够在您的应用程序中创建和运行REST服务,您需要:

  • 在您的项目和应用程序中添加JAX-RS,JAXB Jars
  • 配置Web应用程序(web.xml)以处理REST请求

将JAX-RS,JAXB添加到您的项目

  1. 右键单击项目,然后选择菜单项Build Path> Configure Build Path…。
  2. 单击添加外部JAR按钮
  3. 选择$ JERSEY_HOME / lib和$ JAXB_HOME / lib文件夹中的所有JAR。 您可以更好地了解和重用所有这些JAR创建用户库
  4. 您还需要复制应用程序的web-inf / lib目录中的JAR,此步骤是强制性的,以确保将JAR部署到App Engine时包含在应用程序中。
    注意:我不喜欢此步骤。 我希望通过配置构建路径来执行此操作,以便在执行/部署应用程序时将JAR自动添加到WEB-INF / lib目录中。 不幸的是,我没有找到方法,所以,如果您知道它,请随时发表评论,我将更新本文。

配置Web应用程序

在此步骤中,您将注册一个新的URI以处理REST请求。 为此,您需要注册一个使用Jersey API的新servlet,并将其配置为特定的URI(例如:/ ressources和/或/ rest),并配置包含REST实现类的Java软件包。 因此,您需要使用以下条目修改应用程序的web.xml:

<servlet><servlet-name>Jersey Web Application</servlet-name><servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class><init-param><param-name>com.sun.jersey.config.property.packages</param-name><param-value>com.grallandco.employee.service.rest.impl</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Jersey Web Application</servlet-name><url-pattern>/resources/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>Jersey Web Application</servlet-name><url-pattern>/rest/*</url-pattern></servlet-mapping>
该servlet将响应/ resources /和/ rest / URL。 泽西使用配置参数com.sun.jersey.config.property.packages列出REST服务实现所在的软件包。请注意,您可以根据需要放置任意数量的软件包,只需分隔软件包名称即可。由一个;

创建一个简单的REST服务以测试环境

现在,该项目已准备好包含REST服务。 现在是时候创建一个了。例如,创建类com.grallandco.employee.service.rest.impl.HelloWorldResource,请确保使用在web.xml中为Jersey servlet配置的包名称。我们在上一步中进行的配置是com.grallandco.employee.service.rest.impl

这里是带有JAX-RS批注的示例类:

package com.grallandco.employee.service.rest.impl;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
@Path("/hr/")
public class EmployeeResource {@GET@Produces("text/plain")@Path("/employee") public String getEmployee() {return "Hello World!";}
}

您应该能够对其进行测试,停止服务器并再次运行它,然后在浏览器中输入以下URL:
http:// localhost:8080 / resources / hr / employee
要么 http:// localhost:8080 / rest / hr / employee

将应用程序部署到Google App Engine

在部署应用程序之前,您需要使用Administartion控制台在Google App Engine中注册新应用程序,请参阅此处的文档。 在我的示例中,我使用“ tugdual”作为应用程序ID。

现在,您可以通过单击Eclipse工具栏中的“部署App Engine项目”按钮轻松地将应用程序部署到Google App Engine。

为了能够将您的应用程序部署到Google App Engine,您需要检查您的应用程序是否可以注册,该应用程序ID存储在WEB-INF / lib / appengine-web.xml中。

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"><application>[your-application-id]</application>   <version>1</version>    <!-- Configure java.util.logging --><system-properties><property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/></system-properties>
</appengine-web-app>

App Engine部署按钮会提示您输入多个信息:用户名(您的Google帐户)和密码。

部署完成后,您可以使用以下URL访问您的应用程序:
http:// [your-application-id] .appspot.com / resources / hr / employee
要么 http:// [your-application-id] .appspot.com / rest / hr / employee

将XML和JSON支持到服务

现在,让我们添加新的方法来使用服务来操作“ Employee”对象,并且数据格式应基于JSON和XML。 这是JAXB有用的地方,因为它可以轻松地以XML(显然)和JSON转换marshall / unmarshall Java对象,这很酷!

创建员工类

从创建一个用于处理Employee数据的新类开始,这是一个非常简单的Java类,可能类似于以下代码:

package com.grallandco.employee.service.model;
import java.util.Date;public class Employee {private String firstName;private String lastName;private Date hireDate;private String email;   public Employee(String firstName, String lastName, Date hireDate, String email) {this.firstName = firstName;this.lastName = lastName;this.hireDate = hireDate;this.email = email;}public Employee() {}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Date getHireDate() {return hireDate;}public void setHireDate(Date hireDate) {this.hireDate = hireDate;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String toString() {StringBuffer sb = new StringBuffer();sb.append("First: ").append(getFirstName());sb.append(" - Last: ").append(getLastName());sb.append(" - Date: ").append(getHireDate());sb.append(" - Email: ").append(getEmail());return sb.toString();}
}

当使用某个持久层实现“真实”应用程序时,此POJO是作为JDO / JPA实体的一个。

为您的实体创建一个Converter类

我通常将所有转换封装在某个转换器类中,就像这样,我没有将业务类直接耦合到序列化机制。 (因此,我对类和类列表进行了此操作)。 因此,我们不要将JAXB批注添加到Employee类本身,而是创建一个EmployeeConverter类,该类负责转换并由REST服务使用。

package com.grallandco.employee.service.converter;import java.util.Date;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.grallandco.employee.service.model.Employee;@XmlRootElement(name = "employee")
public class EmployeeConverter {private Employee entity = null;public EmployeeConverter() {entity = new Employee();}public EmployeeConverter(Employee entity) {this.entity = entity;}@XmlElementpublic String getFirstName() {return entity.getFirstName();}@XmlElementpublic String getLastName() {return entity.getLastName();}@XmlElementpublic Date getHireDate() {return entity.getHireDate();}@XmlElementpublic String getEmail() {return entity.getEmail();}public Employee getEmployee() {return entity;}public void setFirstName(String firstName) {entity.setFirstName(firstName);}public void setHireDate(Date hireDate) {entity.setHireDate(hireDate);}public void setLastName(String email) {entity.setEmail(email);}public void setEmail(String lastName) {entity.setLastName(lastName);}
}

现在,您可以更新服务,以使用此实用程序/转换器类根据请求的内容类型返回XML或JSON对象。

将JSON和XML支持添加到REST服务

您需要更改EmployeeRessource类,更改签名并添加getEmployee()方法的新注释。
您要添加的注释:

  • @Produces({“ application / xml”,“ application / json”}):指示服务将产生哪种类型的内容。 基于请求的类型。
  • @Path(“ / employee / {employeeEmail} /”):更改Path以指示Path参数,例如,URL可以接受URI中的电子邮件-不是最佳示例,但是您明白了……
  • public EmployeeConverter getEmployee(@PathParam(“ employeeEmail”)字符串电子邮件):更改方法返回的类型,并采用与@Path批注中定义的Path参数相匹配的参数String。

这里是完整的类代码:

package com.grallandco.employee.service.rest.impl;import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import com.grallandco.employee.service.converter.EmployeeConverter;
import com.grallandco.employee.service.model.Employee;@Path("/hr/")
public class EmployeeRessource {@GET@Produces({"application/xml", "application/json"})@Path("/employee/{employeeEmail}/") public EmployeeConverter getEmployee( @PathParam ("employeeEmail") String email) {//dummy codeEmployee emp = new Employee();emp.setEmail(email);emp.setFirstName("John");emp.setLastName("Doe");EmployeeConverter converter = new EmployeeConverter(emp);return converter;}
}

测试服务

您现在可以在本地运行服务器并测试服务
http:// localhost:8080/resources/hr/employee/tug@grallandco.com
这将返回一个XML文档。 如果要测试JSON调用,则有多种选择:

  • 使用以下命令
tgrall$ curl -H "Accept: application/json" http://localhost:8080/resources/hr/employee/tug@grallandco.com
{"email":"tug@grallandco.com","firstName":"John","lastName":"Doe"}
  • 我使用的是HTTP客户端,它允许您完全配置/设置HTTP请求,而我使用的是Poster Firefox插件
  • 在应用程序中使用一些Javascript代码

您可以在Google App Engine上对已部署的应用程序重复测试。

结论

在本文中,您学习了如何在Google App Engine上创建和部署新的REST服务。 该服务是通过“ JAX-RS参考实施泽西”项目创建的。 在下一篇文章中,您将学习如何在Google App Engine上添加持久性和创建CRUD Rest服务。

参考: Tug博客博客上的JCG合作伙伴 Tugdual Grall在Google App Engine上创建和部署JAX-RS REST服务 。

翻译自: https://www.javacodegeeks.com/2012/05/google-app-engine-jax-rs-rest-service.html

Google App Engine JAX-RS REST服务相关推荐

  1. 谁更胜一筹:技术解析 Google App Engine 和 Amazon EC2

    最近一个潜在客户要求我们比较一下 Amazon EC2 和 Google App Engine,正好我们刚刚在 EC2 和 Google App Engine 上完成了两个相对来说规模较大的项目,因此 ...

  2. Google App Engine对抗Amazon EC2谁更牛?

    导读:笔者根据最近完成的一个项目,并帮助潜在客户比较Amazon EC2和Google App Engine,他将从三个角度来对比这两大云计算平台:技术.业务和未来发展趋势. 关键词:Amazon E ...

  3. web服务r oauth_通过OAuth访问社交网站,第3部分,将Web Twitter客户端部署到Google App Engine...

    存档日期:2019年5月16日 | 首次发布:2010年4月13日 OAuth是一种开放协议,使用户可以在不同的网站之间共享其受保护的资源,而不会冒暴露用户凭据的风险. 本系列的第1部分介绍了OAut ...

  4. gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索

    gkz cloud sql 许多Google AppEngine开发人员一直在等待全文搜索功能,特别是来自网络上最大的搜索引擎Google. 我很高兴看到Google团队正在努力,您可以在Google ...

  5. 使用Cloud SQL的Google App Engine全文搜索

    许多Google AppEngine开发人员一直在等待全文搜索功能,特别是来自网络上最大的搜索引擎Google. 很高兴看到Google团队正在努力,您可以在Google I / O 2011大会上签 ...

  6. 闭关纪要17.Google app engine的简单应用

    在上面用了十一篇博客的文章详细的介绍了,Step1账户登录系统之后,从现在开始,继续写闭关纪要,因为Step1账户登录系统也是闭关工作的一部分,因此保留序号,这篇纪要在上次的闭关纪要5.WML,UTF ...

  7. Google App Engine技术架构之Google App Engine架构

    上一篇我们介绍了Google App Engine的基本信息,本篇将首先介绍App Engine的一些设计理念,接着将对App Engine的组成部分等进行介绍. 设计理念 App Engine在设计 ...

  8. Google App Engine给我们带来了什么?

    这几天正在研究Google App Engine,感觉很不错. 网址在这里. http://code.google.com/intl/zh-CN/appengine/docs/whatisgoogle ...

  9. Google App Engine 学习和实践

    这个周末玩了玩Google App Engine,随手写点东西,算是学习笔记吧.不当之处,请多多指正. 作者:liigo,2009/04/26夜,大连 原创链接:http://blog.csdn.ne ...

最新文章

  1. [原]three.js 地形纹理混合
  2. 嵌入式中的中断服务程序
  3. Emacs镜像ELPA
  4. javascript+Java 实现MD5加密登录密码
  5. apache日志 waf_企业安全体系架构分析:开发架构之开源WAF延申
  6. linux内核空间open,linux kernel之详解从用户态open到内核驱动实现流程
  7. 获取深户股市列表api_网易163 财经股票接口
  8. 【SpringBoot高级篇】springboot实现上传docdocx文件格式转pdf在线预览
  9. mysql取消安全模式
  10. goproxy代理软件 v10.3 轻量级高性能代理软件+链式代理+正向代理+反向代理
  11. 【个人总结】 2016年个人年度总结
  12. 为什么要用“设计模式”?(六大好处)
  13. outlook打不开怎么办?
  14. 在线靶场-墨者-安全意识1星-WEB页面分析
  15. php 病案系统,医疗档案管理系统
  16. 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)
  17. html收藏页面代码,我的收藏页面.html
  18. 基于FPGA的LCD1602显示屏驱动
  19. 华北电大学计算机考研资料汇总
  20. 杭州为什么让人羡慕?

热门文章

  1. tomcat(19)Manager应用程序的servlet类
  2. aws es方案_AWS Elasticsearch后模式
  3. java联接pg库_Java14:使用Java 14的新记录联接数据库表
  4. vaadin_Vaadin提示:以声明方式构建UI
  5. 功能Java示例 第7部分–将失败也视为数据
  6. springmvc jpa_使用JavaConfig的SpringMVC4 + Spring Data JPA + SpringSecurity配置
  7. slf4j 桥接与被桥接_合成和桥接方法
  8. 使用AWS Lambdas扩展技术堆栈
  9. java.util接口_函数接口– Java 8中java.util.function包中的函数接口
  10. 微服务有麻烦吗? Lagom在这里为您提供帮助。 尝试一下!