使用Jersey的RESTful服务

时间:2012-11-22 12:04:22

标签: rest jersey

请找到以下代码。

Service:DataResource.java

    package com.mypack.pack2;


    import java.io.IOException;

    import javax.servlet.http.HttpServletResponse;
    import javax.ws.rs.Consumes;
    import javax.ws.rs.FormParam;
    import javax.ws.rs.GET;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.Context;
    import javax.ws.rs.core.MediaType;
    import com.mypack.pack1.DataClass;

    @Path("data")
    public class DataResource {
        //Just retrieves the data members of the class
         //i.e., 10 Ram
         // Able to retrieve successfully.
        @GET
        @Produces("text/plain")
        public String display()
        {
            DataClass obj1=new DataClass();
            return obj1.getId()+obj1.getName(); 
        }

        @POST
          @Path("/{id}/{name}") 
          @Produces("text/plain")
          @Consumes("text/plain")

        public void newData(@PathParam("id") int no,
                            @PathParam("name") String name) {
            DataClass obj= new DataClass();
            obj.setData(name,no);
            System.out.println("Success");
            System.out.println("Data after changes"+obj.getId()+obj.getName());

            }
            //TodoDao.instance.getModel().put(id, todo);
         }

DataClass.java

    package com.mypack.pack1;

    public class DataClass {

        private String ename="Ram";
        private int eno=10;

        public void setData(String name,int no)
        {
            this.ename=name;
            this.eno=no;
        }
        public int getId()
        {
            return eno; 
        }

        public String getName()
        {
            return ename;
        }

    }

Web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      id="WebApp_ID" version="2.5">
      <display-name>de.vogella.jersey.jaxb</display-name>
      <servlet>
        <servlet-name>Jersey REST Service</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.mypack.pack2</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
    </web-app> 

我无法更改ename的班级成员enoDataClass的值。任何人都可以告诉我为什么它没有改变?是因为我以错误的方式尝试代码吗?

1 个答案:

答案 0 :(得分:2)

你如何调用POST URI(localhost:8080 / JerseyProject / rest / data / 11 / John)?确保你没有从浏览器中调用它,因此你会调用动词GET o / data / {id} / {name}没有实现。这可以解释为什么你获得状态405。

通常使用集合URI上的HTTP VERB POST使用CREATE操作,其中有效负载中的参数不在路径上。在这种情况下,使用POST on / data而不是/ data / {id} / {name}。