REST API using Play! Framework in JSON and XML Format
Play Framework
Play is heavily inspired by Ruby on Rails. Play supports both Scala and Java and enables developers to develop application faster by following convention over configurations.The following post describes how we can expose REST API Endpoints very quickly supporting multiple format like JSON XML etc using Java with Play Framework.
Rest End Point Example
Say We want the List of Users to be exposed as a JSON Response with an endpoint.We will achieve the same with the following steps.
- Step 1: Define the Routes and Controller Mapping
- Step 2: Define Entity(Model Object)
- Step 3: Define the Controller
- Step 4: Start the Play Application
Step1: Define the routes (/conf/routes)
Open the /conf/routes file and add the following line(s).
GET /api/v1/User/details/all controllers.MyApplicationApiV1.getUserList()
GET /api/v1/User/details/{userId} controllers.MyApplicationApiV1.getUserDetails(userId: Long)
These entries in the routes file says that map
route /api/v1/User/details/all to controller method MyApplicationApiV1.getUserList
and
/api/v1/User/details/{userId} to controller method getUserDetails(userId: Long)
Step2: Define the Model Object
@Entity
@Table(name="test_users")
public class User extends Model{
private String userName;
private String userEmail;
private Boolean notification;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public Boolean getNotification() {
return notification;
}
public void setNotification(Boolean notification) {
this.notification = notification;
}
@Override
public String toString() {
return getUserEmail() + " - " + getUserName();
}
}
This is a User Model Object annotated with JPA Annotations like Entity, Table. Note that This Entity Class Extends the play.db.jpa.Model Class. With Proper Database configurations we should be able to Persist this Entity in Database. The Controller Class will be able to retrieve these Entities and work with them.
Step3: Define the Controller
Now the Controller Section. In Play framework it is easy to expose any rest endpoints, we have to just implement the method(class) as per the routes definition.This Controller has two methods getUserList() and getUserDetails(userID) .
As per the routes definitions, Play will map the first endpoint
/api/v1/User/details/all to the method getUserList(). This controller method is loading all the all the Users Objects and using the renderJSON method to render the response in JSON Format. Second Method in the Controller getUserDetails(Long userId) maps to URI /api/v1/User/details/{userId} This method is loading only a specific User and Sending the response in JSON format.
Rendering the Response in XML Format.
If we want to render the response in XML Format we can use renderXml(s) rather then renderJSON(s) in the controller methods. Following is the example for rendering the response in XML format for the/api/v1/User/details/all End Point.
Comments
Post a Comment