【问题标题】:How to Create REST Application using Google App Engine?如何使用 Google App Engine 创建 REST 应用程序?
【发布时间】:2017-06-07 09:51:35
【问题描述】:

我正在尝试使用 Google App Engine 开发 REST 应用程序。 我已经尝试了很多东西,但没有什么对我有用,所以如果您有任何示例代码,请与我分享。

【问题讨论】:

标签: rest google-app-engine


【解决方案1】:

1) 你必须为谷歌应用引擎配置你的 Eclipse。 所以你可以在这里学习:https://www.youtube.com/watch?v=tVIIgcIqoPw&t=1426s

2) 在应用程序中配置 REST 支持

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

  2. 在您的项目和应用程序中添加 JAX-RS、JAXB、jersey-core、jersey-server、jersey-servlet Jars。

  3. 配置 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,此步骤是强制性的,以确保在部署到 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 文档。

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 2012-11-14
    • 2015-10-27
    • 2017-07-28
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多