Reputation: 982
I have been through several links figuring out how do I return JSON response in a RESTful webservice created using Jersey. Here is my code:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>ScraperWebProject</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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.myscraper</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>
</web-app>
MyScraper.java
package com.myscraper;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class MyScraper {
@GET
@Produces( {MediaType.APPLICATION_JSON })
public SearchModel sayJsonHello() {
System.out.println("JSON text hello called");
SearchModel s = new SearchModel("My First Search", "My first search is done");
return s;
}
@GET
@Produces( { MediaType.TEXT_XML })
public SearchModel sayPlainTextHello() {
System.out.println("Plain text hello called");
SearchModel s = new SearchModel("My First Search", "My first search is done");
return s;
}
}
SearchModel.java
package com.myscraper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class SearchModel {
private String title;
private String description;
public SearchModel(){
}
public SearchModel(String title,String desc){
this.title = title;
this.description= desc;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "SearchModel [title=" + title + ", desc=" + description + "]";
}
}
I am somehow unable to get the request mapped to the getJSONHello() method. The solution found at this Link says to use Jersey JSON but the xml provided is not valid for the latest Jersey version. It uses com.sun relation property which is valid only for older version of Jersey.
Upvotes: 0
Views: 878
Reputation: 209132
You need to add the following dependency for Jersey 2
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey2.version}</version>
</dependency>
Upvotes: 1
Reputation: 79
<pre>call api by link /rest/hello/sayJsonHello etc. By Get method because it needs complete path for method sayJsonHello</pre>
package com.myscraper;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class MyScraper {
@GET
@Path("/sayJsonHello")
@Produces( {MediaType.APPLICATION_JSON })
public SearchModel sayJsonHello() {
System.out.println("JSON text hello called");
SearchModel s = new SearchModel("My First Search", "My first search is done");
return s;
}
@GET
@Path("/sayPlainTextHello")
@Produces( { MediaType.TEXT_XML })
public SearchModel sayPlainTextHello() {
System.out.println("Plain text hello called");
SearchModel s = new SearchModel("My First Search", "My first search is done");
return s;
}
}
Upvotes: 0