Consuming POST Request in RESTEasy

22,607

HI i have Used Jersey Client to post the request. i am able to post XML data. that should work for Json also. Please refer how to build REST Client: http://entityclass.in/rest/jerseyClientGetXml.htm

REST Service

@Path("/StudentService")
public class StudentService {

    @POST
    @Path("/update")
    @Consumes(MediaType.APPLICATION_XML)
    public Response consumeXML( Student student ) {

        String output = student.toString();

        return Response.status(200).entity(output).build();
    }
}

Now REst Jersey Client:

public static void main(String[] args) {

        try {

            Student student = new Student();
            student.setName("JON");
            student.setAddress("Paris");
            student.setId(5);

            String resturl = "http://localhost:8080/RestJerseyClientXML/rest/StudentService/update";
            Client client = Client.create();
            WebResource webResource = client.resource(resturl);

            ClientResponse response = webResource.accept("application/xml")
                    .post(ClientResponse.class, student);
            String output = response.getEntity(String.class);

            System.out.println("Server response : " + response.getStatus());
            System.out.println();
            System.out.println(output);

            if (response.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + response.getStatus());
            }

        } catch (Exception e) {

        }
    }
Share:
22,607
Coding Bad
Author by

Coding Bad

Updated on August 25, 2020

Comments

  • Coding Bad
    Coding Bad over 3 years

    Earlier, I used POSTMAN tool to submit GET/PUT/POST/DELETE but right now I am trying to implement a POST operation without using any REST API client. For this purpose I referred to this website. I created a Maven project and these are my sample codes:

    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"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>RESTEasyJSONExample</display-name>
    
    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
    
    <!-- Auto scan REST service -->
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>
    
    <!-- this should be the same URL pattern as the servlet-mapping property -->
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/rest</param-value>
    </context-param>
    
    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
            </listener-class>
    </listener>
    
    <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
    </servlet>
    

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.java.resteasy</groupId>
      <artifactId>RESTEasyJSONExample</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    
    <repositories>
        <repository>
            <id>JBoss repository</id>
            <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
        </repository>
    </repositories>
    
    <dependencies>
    
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.0.4.Final</version>
        </dependency>
    
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>3.0.4.Final</version>
        </dependency>
    
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>3.0.4.Final</version>
        </dependency>
    
    </dependencies>
    

    Java Class to be represented to JSON

    (Student.java)

    package org.jboss.resteasy;
    
    public class Student {
    
    private int id;
    private String firstName;
    private String lastName;
    private int age;
    
    // No-argument constructor
    public Student() {
    
    }
    
    public Student(String fname, String lname, int age, int id) {
        this.firstName = fname;
        this.lastName = lname;
        this.age = age;
        this.id = id;
    }
    
    //getters and settters
    
    @Override
    public String toString() {
        return new StringBuffer(" First Name : ").append(this.firstName)
                .append(" Last Name : ").append(this.lastName)
                .append(" Age : ").append(this.age).append(" ID : ")
                .append(this.id).toString();
    }
    
    }
    

    REST Service to produce and consume JSON output

    RESTEasyJSONServices.java

    package org.jboss.resteasy;
    
    //import everything here
    
    @Path("/jsonresponse")
    public class RestEasyJSONServices {
    
    @GET
    @Path("/print/{name}")
    @Produces("application/json")
    public Student produceJSON( @PathParam("name") String name ) {
    
        Student st = new Student(name, "Marco",19,12);
    
        return st;
    
    }
    
    @POST
    @Path("/send")
    @Consumes("application/json")
    public Response consumeJSON(Student student) {
    
        String output = student.toString();
    
        return Response.status(200).entity(output).build();
    
    }
    }
    

    RESTEasyClient.java

    package org.jboss.resteasy.restclient;
    
    //import everything here
    public class RESTEasyClient {
    public static void main(String[] args) {
    
    Student st = new Student("Catain", "Hook", 10, 12);
    try {
    ResteasyClient client = new ResteasyClientBuilder().build();
    
    ResteasyWebTarget target = client.target("http://localhost:8080/RESTEasyJSONExample/rest/jsonresponse/send");
    
    Response response = target.request().post(Entity.entity(st, "application/json"));
    
            if (response.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + response.getStatus());
            }
    
            System.out.println("Server response : \n");
            System.out.println(response.readEntity(String.class));
    
            response.close();
    
        } catch (Exception e) {
    
            e.printStackTrace();
    
        }
    
    }
    }
    

    Now I am getting the output whenever I use the GET url:

    http://localhost:8080/RESTEasyJSONExample/rest/jsonresponse/print/James
    

    which is basically used to produce the JSON but when I use the POST url which is http://localhost:8080/RESTEasyJSONExample/rest/jsonresponse/send I do not get any response. Am I using the correct URL? Where am I doing wrong? My overall purpose is to implement POST method using JSON or XML without using any REST Client tool like POSTMAN.

  • Coding Bad
    Coding Bad over 8 years
    Rahul Sharma: so you are saying that when you entered localhost:8080/RestJerseyClientXML/rest/StudentService/updat‌​e which is basically the POST URL then you got Name : JON Address : Paris ID : 5 as your server response?
  • Rahul Sharma
    Rahul Sharma over 8 years
    Yes . this operation is for basically to post the Student xml object. Just i am returning Student information for user .