1) 你必须为谷歌应用引擎配置你的 Eclipse。
所以你可以在这里学习:https://www.youtube.com/watch?v=tVIIgcIqoPw&t=1426s
2) 在应用程序中配置 REST 支持
为了能够在您的应用程序中创建和运行 REST 服务,您需要:
在您的项目和应用程序中添加 JAX-RS、JAXB、jersey-core、jersey-server、jersey-servlet 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,此步骤是强制性的,以确保在部署到 App Engine 时 JAR 包含在应用程序中。
注意:我不喜欢这一步。我更愿意通过配置构建路径来做到这一点,以便在执行/部署应用程序时自动将 JAR 添加到 WEB-INF/lib 目录。不幸的是我没有找到方法,所以如果你知道,请随时发表评论,我会更新文章。
配置网络应用程序
1) 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.demo.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 服务来测试环境
2)。 EmployeeResource.java
package com.demo.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:8888/resources/hr/employee
或者
http://localhost:8888/rest/hr/employee
如果运行成功,说明你的配置运行良好,可以继续开发。
现在我们将创建一个演示应用程序,它使用 REST 返回员工电子邮件、名字和姓氏。
为此,您必须在 EmployeeResouce.java 中执行一些更改
你需要添加一些类,如下所示:
1) 员工模型类:Employee.java
package com.demo.employee.service.model;
import java.util.Date;
public class Employee {
private String firstName;
private String lastName;
private Date hireDate;
public Employee() {}
public Employee(String firstName, String lastName, Date hireDate, String email) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.hireDate = hireDate;
this.email = email;
}
<generated setter and getter >
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();
}
}
实体的转换器类
我通常将所有转换封装在某个转换器类中,例如我不直接将我的业务类与序列化机制耦合。 (所以我对类和类列表这样做)。因此,与其将 JAXB 注释添加到 Employee 类本身,不如创建一个 EmployeeConverter 类,该类将负责转换并由您的 REST 服务使用。
2) EmployeeConverter.java
package com.demo.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;
}
@XmlElement
public String getFirstName() {
return entity.getFirstName();
}
@XmlElement
public String getLastName() {
return entity.getLastName();
}
@XmlElement
public Date getHireDate() {
return entity.getHireDate();
}
@XmlElement
public 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);
}
}
为您的 REST 服务添加对 JSON 和 XML 的支持
您需要更改 EmployeeRessource 类,更改签名并添加 getEmployee() 方法的新注释。
您要添加的注释:
- @Produces({"application/xml", "application/json"}) :指示服务将生成哪种类型的内容。基于请求的类型。
- @Path("/employee/{employeeEmail}/") :更改 Path 以指示 Path 参数,例如这里的 URL 可以接受 URI 中的电子邮件 - 这不是最好的例子,但你明白了。 ..
- public EmployeeConverter getEmployee(@PathParam ("employeeEmail") String email) :更改方法返回的类型,并将参数作为 String 与 @Path 注释中定义的 Path 参数匹配。
3)。 EmployeeResource.java
package com.demo.employee.service.rest.impl;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import com.demo.employee.service.converter.EmployeeConverter;
import com.demo.employee.service.model.Employee;
@Path("/hr/")
public class EmployeeResource {
@GET
@Produces({"application/xml", "application/json"})
@Path("/employee/{employeeEmail}/")
public EmployeeConverter getEmployee( @PathParam ("employeeEmail")
String email) {
//dummy code
Employee emp = new Employee();
emp.setEmail(email);
emp.setFirstName("Dhruv");
emp.setLastName("Gurjar");
EmployeeConverter converter = new EmployeeConverter(emp);
return converter;
}
}
测试服务
您现在可以在本地运行服务器并测试服务
http://localhost:8888/rest/hr/employee/test@test.com
这将返回一个 XML 文档。