JAX-RS & jersey
JSR 311 defines REST support in java. JAX-RS uses annotations to define the REST in java classes.
What is Jersey?
- Jersey provieds api/library for JSR 311. We can use it in implementing Restful webservices in a Java servlet container.
- In server side it helps in scanning predefined classes and identifies RESTful resources. In web.xml we need to register the servlet for web application.
- It also provies a client library to communicate with a RESTful webservice.
How does it works?
Let say the application has the following URL as the request from the client/browser.
http://localhost:8080/web-application/rest/rest_request_path
The servlet maps the required class and method to give correct response to the above request.
The annotations in the classes helps the servlet to pick the right mapping.
Using the internal library Java Architecture for XML Binding (JAXB) we can have the
JAX-RS supports the creation of XML and JSON.
Annotation Description
Annotation | Description | Package Detail |
---|---|---|
@GET | helps in handle the GET request | (javax.ws.rs.GET) |
@POST | helps in handling the POST request | ( javax.ws.rs.POST) |
@Produces | it handles the output type that will be generated | ( javax.ws.rs.Produces) |
@Path | it handles the request mapping for specific url | ( javax.ws.rs.Path) |
@PathParam | helps to inject values from the URL into a method parameter. | (javax.ws.rs.PathParam) |
@QueryParam | if the request have any query parameters then we can use this to handle using this annotation | (javax.ws.rs.QueryParam) |
@Consumes | it specifies MIME media types a REST resource can consume. | (javax.ws.rs.Consumes) |
@FormParam | the REST resources generally consume XML/JSON. Using this we can read form parameters sent in POST requests. | (javax.ws.rs.FormParam) |
@PUT | handles the PUT method | (javax.ws.rs.PUT) |
@DELETE | handles the DELETE method | (javax.ws.rs.DELETE) |
Maven jersey dependency.
A quick google search will give you maven dependency. Depending upon the project requirement you can find one.
Maven dependency for jersey-servlet <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-servlet</artifactId> <version>1.19</version> </dependency> Maven dependency for client <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.22.1</version> </dependency>
Code snippets
/Maps the path for BaseURL/rest/myMapping package com.helical.restExample @Path("/myMapping") public class SampleService { @GET @Produces(MediaType.TEXT_PLAIN) public String plainMessage() { return "REST WORLD"; } @GET @Produces(MediaType.TEXT_XML) public String xmlMessage() { return "<?xml version=\"1.0\"?>" + "<message>REST WORLD" + "</message>"; } @GET @Produces(MediaType.APPLICATION_JSON) public String jsonMessage() { return "{\"mesaage\" : \"rest world\"}"; } @GET @Produces(MediaType.TEXT_HTML) public String htmlMessage() { return "<html> " + "<title>" + "REST WORLD" + "</title>" + "<body><h1>" + "Welcome to the Rest world" + "</body></h1>" + "</html> "; } }
Registering the api
In the web.xml we need to configure the jersey servlet to help the mapping
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.helical.restExample</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>
This is good to go. We can run the webservice application to get the desired result.
Sources internet
Best Open Source Business Intelligence Software Helical Insight is Here