如何使用Google App Engine创建REST应用程序?

时间:2017-06-07 09:51:35

标签: rest google-app-engine

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

1 个答案:

答案 0 :(得分:2)

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请求。
  4. 将JAX-RS,JAXB添加到您的项目中

    1. 右键单击项目并选择菜单项Build Path>配置构建路径...

    2. 点击Add External JARs按钮

    3. 选择位于$ JERSEY_HOME / lib和$ JAXB_HOME / lib文件夹中的所有JAR。您可以更好地查看和重用创建包含所有这些JAR的用户库。

    4. 您还需要在应用程序的web-inf / lib目录中复制JAR,必须执行此步骤以确保在部署到App Engine时JAR包含在应用程序中。 注意:我不喜欢这一步。我更愿意通过配置构建路径来执行此操作,以在执行/部署应用程序时自动将JAR添加到WEB-INF / lib目录。不幸的是我找不到办法,所以如果你知道的话,随时发表评论,我会更新文章。

    5. 配置网络应用程序

      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 param匹配。

      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文档。