- 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項目,請執行以下操作:
- 單擊“新的Web應用程序項目”按鈕
在工具欄中。 也可以使用菜單文件> Web應用程序項目來執行此操作
- 將打開“創建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添加到您的項目
- 右鍵單擊項目,然后選擇菜單項Build Path> Configure Build Path…。
- 單擊添加外部JAR按鈕
- 選擇$ JERSEY_HOME / lib和$ JAXB_HOME / lib文件夾中的所有JAR。 您可以更好地了解和重用所有這些JAR創建用戶庫
- 您還需要復制應用程序的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>
創建一個簡單的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