Previously we have learnt how to use @Produces annotation, Consuming JSON or Consuming XML separately. We have consumed either xml or json request but not both xml and json in a single method. In this example we will learn how to consume multiple media type which the client is giving as input, lets see how we can achieve it.
Folder Structure
- Create a Dynamic Web Project RESTful_Example and create a package for our src files “com.javainterviewpoint“
- Place the required jar files under WEB-INF/Lib
jersey-bundle-1.18.jar
jsr311-api-1.1.1.jar
jaxb-api.jar
jaxb-impl-2.0.1.jar
asm-3.1.jar - Create the Java classes ConsumesBothExample.java and Student.java under com.javainterviewpoint folder.
- Place the web.xml under the WEB-INF directory
Produces_XML_JSON_Example.java
The getBothRequest() method is capable of consuming both xml and json request, as we have added both media types to @Consumes annotation
package com.javainterviewpoint; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; @Path("consumesboth") public class ConsumesBothExample { @Path("both") @POST @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) public void getBothRequest(Student s) { System.out.println("****Student Details*****"); System.out.println("Student Name : "+s.getName()); System.out.println("Student Age : "+s.getAge()); } }
Student.java
We have annotated our Student class with @XmlRootElement marking the root element.
package com.javainterviewpoint; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Student { private String name; private int age; public Student() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee http://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.
Output :
XML Request
http://localhost:8080/RESTful_Example/rest/consumesboth/both In the postman client under "Body" tab select "raw" format and select "xml" in dropdown****Student Details***** Student Name : JavaInterviewPoint99 Student Age : 99
JSON Request
http://localhost:8080/RESTful_Example/rest/consumesboth/both
In the postman client under "Body" tab select "raw" format and select "json" in dropdown
****Student Details***** Student Name : JavaInterviewPoint Student Age : 11
Leave a Reply