JAX-RS @PathParam Example

In this example we will learn how to use the @PathParam annotation to get the Parameter passed in the URI in JAX-RS RESTful service.@PathParam parses the values of the parameter which is passed through @Path annotation

In general there are two ways to pass the parameter in a GET request of the REST Service.
First way is using @PathParam and the Other way is using @QueryParam. As of now we will look in how to use @PathParam annotation.

We define a parameter with @Path(“/{parameter}”) annotation on to a method and through which we will get value of the parameter by parsing it with @PathParam(“parameter”). We have already used it in our Jersey HelloWorld example.

Folder Structure

  1. Create a Dynamic Web Project RestfulExample and create a package for our src files “com.javainterviewpoint
  2. Place the required jar files under WEB-INF/Lib 

    jersey-bundle-1.18.jar
    asm-3.1.jar

  3. Create the Java classes HelloWorld.java under  com.javainterviewpoint folder.
  4. Place the web.xml  under the WEB-INF directory

@PathParam – Single Parameter

Here will pass a single parameter.

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("hello")
public class HelloWorld
{
	@GET
	@Path("{username}")
	public Response welcome(@PathParam("username")String name)
	{
		return Response.status(200).
				entity("Welcome to hello world program "+name).build();
	}
	
}

Here using @Path(“{username}”) we have defined a new path parameter with the name “username” , we will use @PathParam(“username”) to parse the parameter and push the value to the String “name”. 

Hit on the URI : “http://localhost:8080/RestfulExample/rest/hello/JavaInterviewPoint”

Welcome to hello world program JavaInterviewPoint

@PathParam – Multiple Parameter

Here we will parase multipe parameters (username,id,age)

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("hello")
public class HelloWorld
{
	@GET
	@Path("{username}/{id}/{age}")
	public Response getUserDetails(
			@PathParam("username")String name,
			@PathParam("id")int id,
			@PathParam("age")int age)
	{
		return Response.status(200).
				entity("Username : "+name+" ID : "+id+" Age : "+age).build();
	}
}

Hit on the URI : “http://localhost:8080/RestfulExample/rest/hello/JavaInterviewPoint/999/22”

Username : JavaInterviewPoint ID : 999 Age : 22

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/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee%20http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee%20http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4">
 <display-name>Restful Web Application</display-name>
 <servlet>
 <servlet-name>jersey-serlvet</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.javainterviewpoint</param-value>
 </init-param>
 
 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>jersey-serlvet</servlet-name>
 <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
</web-app>

We register our jersey container “com.sun.jersey.spi.container.servlet.ServletContainer” in the servlet-class of our web.xml and we will mention the source files location as the value to the init param “com.sun.jersey.config.property.packages” so that the container will scan for annotations of the class files within that package.

Leave a Reply

Your email address will not be published. Required fields are marked *