javu.infy
javu.infy

Reputation: 361

RESTful Service using Jersey

Please find the following code.

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> 

I am not able to change the values of class members ename and eno of DataClass. Can anyone please tell me why it is not changing? Is it because i am trying the code in a wrong way?

Upvotes: 0

Views: 256

Answers (1)

Felipe Firmo
Felipe Firmo

Reputation: 56

How are you invoking the POST URI (localhost:8080/JerseyProject/rest/data/11/John)? Be sure you are not invoking it from your browser, cause this way you would be invoking the verb GET o the /data/{id}/{name} that doesn't have implementation. That would explain why you're getting the status 405.

Usually the CREATE operation is used using the HTTP VERB POST on the collection URI with its params in the payload not on the path. In this case using POST on /data instead of /data/{id}/{name}.

Upvotes: 2

Related Questions