我正在尝试使用Google App Engine开发REST应用程序。 我尝试了很多东西,但没有什么对我有用,所以如果您有任何示例代码,请与我分享。
答案 0 :(得分:2)
1)你必须为谷歌应用引擎配置你的eclipse。 所以你可以在这里学习:https://www.youtube.com/watch?v=tVIIgcIqoPw&t=1426s
2)在应用程序中配置REST支持
为了能够在您的应用程序中创建和运行REST服务,您需要:
在项目和应用程序中添加JAX-RS,JAXB,jersey-core,jersey-server,jersey-servlet Jars。
将JAX-RS,JAXB添加到您的项目中
右键单击项目并选择菜单项Build Path>配置构建路径...
点击Add External JARs按钮
选择位于$ 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()方法的新注释。 您要添加的注释:
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文档。