Earlier I have shared with you how to use JAX-RS to access HTTP GET Request and how extract URI Query Parameters and how to read Path Parameters. In this blog post I am going to share with you how to handle HTTP POST request and how to read the content of HTTP Request Body as well as how to Form Parameters with the @FormParam annotation.
I assume you already have your JAX-RS application created but if you do not, please follow this example on How to create a new Jersey JAX-RS project with Maven.
HTTP POST Request Body JSON Document
Let’s assume we are working on a web service that needs to access JSON document containing user details to be recorded in database. The user details will be sent as HTTP POST request in a form of JSON document like the one below. Of course you can extend this JSON document and add additional details into it.
{ "firstName":"Sergey", "lastName":"Kargopolov" }
User Profile Java Model Class
In our Java code to map the above JSON document to a Java object we will need to create a model class called UserProfile like the one below:
package com.appsdeveloperblog.examples.http.post; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class UserProfile { private String firstName; private String lastName; /** * @return the firstName */ public String getFirstName() { return firstName; } /** * @param firstName the firstName to set */ public void setFirstName(String firstName) { this.firstName = firstName; } /** * @return the lastName */ public String getLastName() { return lastName; } /** * @param lastName the lastName to set */ public void setLastName(String lastName) { this.lastName = lastName; } }
Java Method with @Post Annotation
For our web service method to be able to accept HTTP Post request we will need to create a method that accepts UserProfile object as an argument and annotate this method with @Post annotation. Like the one below:
@POST @Consumes(MediaType.APPLICATION_JSON) @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public UserProfile createUserProfile(UserProfile userProfile) { //we can make use of UserProfile now String firstName = userProfile.getFirstName(); String lastName = userProfile.getLastName(); System.out.println("First name = " + firstName); System.out.println("Last name = " + lastName); // And when we are done we can return user profile back return userProfile; }
Now let’s add this method to a Root Resource Class to look at a complete example:
Root Resource Class with @Path Annotation
package com.appsdeveloperblog.examples.http.post; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/users") public class HttpPostExample { @POST @Consumes(MediaType.APPLICATION_JSON) @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public UserProfile createUserProfile(UserProfile userProfile) { //we can make use of UserProfile now String firstName = userProfile.getFirstName(); String lastName = userProfile.getLastName(); System.out.println("First name = " + firstName); System.out.println("Last name = " + lastName); // And when we are done we can return user profile back return userProfile; } }
Please note the @Path(“/users”) annotation. This annotation makes the Root Resource class be available under the path /users .
To make one of our Web Service methods handle HTTP POST request we need to mark it with the @Post annotation. Please note the @POST annotation above the createUserProfile method. When HTTP POST request is sent to /users the createUserProfile will be called and the JSON document with the user details I have mentioned above will be converted into a Java object of UserProfile type.
I hope this short blog post was of some value to you. Check out the below video courses which are about building RESTful Web Services with Java. I am confident you will find a lot of value in them and your learning progress will greatly improve.
Happy learning! 🙂