Getting started with spring mvc and jersey rest service example
This topic is about how to work with sping mvc controller using annotations and jersey rest service
Create dynamic web project using eclipse. Name it has springweb-mvc
This is spring project, so first we need to configure the details in web.xml for spring
Edit the web.xml file and add the below code
1. Dispatcher Servlet
2. Context LoaderListener
3. SpringServlet for rest webservice
springweb-mvc
org.springframework.web.context.ContextLoaderListener
spring
org.springframework.web.servlet.DispatcherServlet
1
spring
/
jersey-serlvet
com.sun.jersey.spi.spring.container.servlet.SpringServlet
com.sun.jersey.config.property.packages com.siva.rest
jersey-serlvet
/rest/*
1. Now we need to create spring-servlet.xml, hope you will understand why we need to create this file,
Let me explain , in above web.xml we have configured servlet name as spring. So as part of spring DispatcherServlet we need to create xml (servletname-servlet.xml). in this case spring –servlet.xml
2. Need to provide the jersey related configuration
Here I have provided param-value as com.siva.rest , where our rest service related files resides.
Add below code in spring-servlet.xml
In the above xml, component package we have given has com.siva.controlller, where our controller classes resides.
Since we are using annotations no other configurations required.
View configuration - our views will be under WebContent/views
Now we need to create applicationContext.xml, where application will start the executing, here I am not providing any configuration details in this file, simply I am creating file to avoid runtime exceptions .
Now it’s time to create controllers , rest service and views
1. First we will create rest webservice
Create a Calculator.java under package com.siva.rest
package com.siva.rest;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Calculator")
public class Calculator {
private int number1;
private int number2;
// Must have no-argument constructor
public Calculator() {
}
public Calculator(int number1, int number2) {
this.number1 = number1;
this.number2 = number2;
}
@Override
public String toString() {
return new StringBuffer(" Number 1 : ").append(this.number1)
.append("Number 2 : ").append(this.number2).toString();
}
public int getNumber1() {
return number1;
}
@XmlElement
public void setNumber1(int number1) {
this.number1 = number1;
}
public int getNumber2() {
return number2;
}
@XmlElement
public void setNumber2(int number2) {
this.number2 = number2;
}
}
Now we need to write Rest service class JersyRestService under package com.siva.rest
package com.siva.rest;
import javax.ws.rs.Consumes;
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.MediaType;
import javax.ws.rs.core.Response;
@Path("/xmlServices")
public class JerseyRestService {
@GET
@Path("/add/{number1}/{number2}")
@Produces(MediaType.TEXT_PLAIN)
public String add( @PathParam("number1") Integer number1, @PathParam("number2")Integer number2 ) {
System.out.println("Number 1["+number1+"], Number 2["+number2+"]");
return number1+number2 +"";
}
@POST
@Path("/substract")
@Produces(MediaType.TEXT_PLAIN)
public String substract(Calculator cal ) {
System.out.println("Number 1["+cal.getNumber1()+"], Number 2["+cal.getNumber2()+"]");
return(cal.getNumber1()- cal.getNumber2() +"");
}
}
Create a Controller RestServiceController class under package com.siva.controller
package com.siva.controller;
import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.siva.rest.Calculator;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
@Controller
public class RestServiceController {
@RequestMapping(value="/addRequestDetails" ,method = RequestMethod.POST)
public ModelAndView addNumbers(@ModelAttribute("addRequestDetails") Calculator command,
ModelMap model) {
System.out.println("addNumbers inside RestServiceController");
int number1 = command.getNumber1();
int number2 = command.getNumber2();
String resultMessage = null;
try {
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/springweb-mvc/rest/xmlServices/add/"+number1+"/"+number2);
ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
resultMessage = response.getEntity(String.class);
System.out.println("Addition of the 2 numbers result["+resultMessage+"]");
System.out.println(" resposne status in RestServiceController ["+response.getStatus()+"]");
}
catch (Exception e) {
System.out.println("Exception occurred while calling rest services..."+e);
e.printStackTrace();
}
return new ModelAndView("restresult").addObject("resultMessage", "Addition of the two values result is["+resultMessage +"]");
}
@RequestMapping(value="/substractRequestDetails" ,method = RequestMethod.POST)
public ModelAndView substractNumbers(@ModelAttribute("substractRequestDetails") Calculator command,
ModelMap model) {
System.out.println("addNumbers inside RestServiceController");
int number1 = command.getNumber1();
int number2 = command.getNumber2();
Calculator cal = new Calculator(number1, number2);
String resultMessage = null;
try {
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/springweb-mvc/rest/xmlServices/substract");
ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class,cal);
resultMessage = response.getEntity(String.class);
System.out.println("Substraction of the 2 numbers result["+resultMessage+"]");
System.out.println(" resposne status in RestServiceController ["+response.getStatus()+"]");
}
catch (Exception e) {
System.out.println("Exception occurred while calling rest services..."+e);
e.printStackTrace();
}
return new ModelAndView("restresult").addObject("resultMessage", "Substraction of the two values result is["+resultMessage +"]");
}
}
Create addition.jsp page under WebContent/views/
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Add 2 numbers using rest service
Create substraction.jsp page under WebContent/views/
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
substract 2 numbers using rest post service
Now after adding/substracting the numbers we need to show the results
Create a restresult.jsp under WebContent/views/
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Result of the rest service
${resultMessage}
Now we have completed coding now we need to run this project. I have executed this project using tomcat7 server
Required jars to executing this project, please make sure your tomcat or jboss lib having these ja rs
common jars
commons-beanutils-1.8.0.jar
commons-codec-1.3.jar
commons-collections.jar
commons-digester-2.1.jar
commons-logging-1.0.jar
commons-net-1.4.0.jar
Jersey related jars
jersey-client.jar
jersey-core-1.8.jar
jersey-server-1.8.jar
jersey-spring-1.8
spring related jars
spring-aop-4.1.5.RELEASE.jar
spring-beans-4.1.5.RELEASE.jar
spring-context-4.1.5.RELEASE.jar
spring-core-4.1.5.RELEASE.jar
spring-expression-4.1.5.RELEASE.jar
spring-web-4.1.5.RELEASE.jar
spring-webmvc-4.1.5.RELEASE.jar
asm-3.1.jar
After executing project Now it’s time to see the output.
If project deployed successfully then click the below link
http://localhost:8080/springweb-mvc/views/addition.jsp
After entering the values click on Add button
Substract the numbers using following URL
http://localhost:8080/springweb-mvc/views/substraction.jsp
After entering the details ,Result page same like the addition results page.
This is how Rest service with Spring mvc will work.
If you want execute same rest service using main method use the below code.
Create a class JersyClient.java under package com.siva.rest
package com.siva.rest;
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
public class JerseyClient {
public static void main(String[] args) {
try {
Client client = Client.create();
//Adding 2 numbers using GET
WebResource webResource = client.resource("http://localhost:8080/springweb-mvc/rest/xmlServices/add/"+40+"/"+50);
ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
String resultMessage = response.getEntity(String.class);
System.out.println("Addition of the 2 numbers result["+resultMessage+"]");
System.out.println(" resposne status in RestServiceController ["+response.getStatus()+"]");
//Substract 2 numbers using POST
Calculator cal = new Calculator(20, 10);
WebResource webResource1 = client.resource("http://localhost:8080/springweb-mvc/rest/xmlServices/substract");
ClientResponse response1 = webResource1.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, cal);
System.out.println("["+response1.getStatus()+"]");
if (response1.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "+ response1.getStatus());
}
String output = response1.getEntity(String.class);
System.out.println("Substraction of 2 numbers : \n["+output+"]");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Thanks for viewing this post.