Javalin REST API
1. Introduction
This is an in-depth article related to the Javalin REST API. Javalin is a web framework used by Java and Kotlin developers. The framework runs on Jetty Web server. It is similar to koa.js.
2. Javalin
2.1 Prerequisites
Java 7 or 8 is required on the linux, windows or mac operating system. Maven 3.6.1 is required for building the javalin REST API .
2.2 Download
You can download Java 8 can be downloaded from the Oracle web site . Apache Maven 3.6.1 can be downloaded from Apache site.
2.3 Setup
You can set the environment variables for JAVA_HOME and PATH. They can be set as shown below:
Setup
JAVA_HOME="/desktop/jdk1.8.0_73" export JAVA_HOME PATH=$JAVA_HOME/bin:$PATH export PATH
The environment variables for maven are set as below:
Maven Environment
JAVA_HOME=”/jboss/jdk1.8.0_73″ export M2_HOME=/users/bhagvan.kommadi/Desktop/apache-maven-3.6.1 export M2=$M2_HOME/bin export PATH=$M2:$PATH
2.4 Adding Dependencies
You need to add the below dependency in the pom.xml
Javalin Dependency
<dependency> <groupId>io.javalin</groupId> <artifactId>javalin</artifactId> <version>1.6.1</version> </dependency>
2.5 Setting up Javalin
You can create a JavalinExample class as shown below. In this example, Javalin web server is started at port number 7000. It is started with pointing to three routes : example.
Javalin Example
package org.javacodegeeks.javalin; import org.javacodegeeks.javalin.Customer.CustomerController; import io.javalin.Javalin; public class JavalinExample { public static void main(String[] args) { Javalin example = Javalin.create() .port(7000) .start(); example.get("/example", ctx -> ctx.html("Ths is a Javalin Example")); } }
2.6 Create a Data Model
You can first create a Customer class which has properties id, name, and ssn. Sample code is shown below:
Javalin Data Model – Customer
package org.javacodegeeks.javalin.Customer; public class Customer { public final int id; public final String name; public final int ssn; public Customer(int id, String name, int ssn) { this.id = id; this.name = name; this.ssn = ssn; } }
2.7 Create a DAO
Now you can create a CustomerDAO class as shown below:
CustomerDAO
package org.javacodegeeks.javalin.Customer; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; class CustomerDao { private final List customers = Arrays.asList( new Customer(0, "George Smith",334872136), new Customer(1, "Tania Rogers",231872636), new Customer(2, "Carol Smith",431875136) ); private static CustomerDao customerDao = null; private CustomerDao() { } static CustomerDao instance() { if (customerDao == null) { customerDao = new CustomerDao(); } return customerDao; } Optional getCustomerById(int id) { return customers.stream().filter(customer -> customer.id == id).findFirst(); } Iterable getAllCustomerNames() { return customers.stream().map(customer -> customer.name).collect(Collectors.toList()); } }
2.8 Create a Model Controller
You can now create a Customer Controller class as shown below:
CustomerController
package org.javacodegeeks.javalin.Customer; import io.javalin.Handler; import java.util.Objects; public class CustomerController { public static Handler fetchAllCustomeNames = ctx -> { CustomerDao dao = CustomerDao.instance(); Iterable allCustomers = dao.getAllCustomerNames(); ctx.json(allCustomers); }; public static Handler fetchById = ctx -> { int id = Integer.parseInt(Objects.requireNonNull(ctx.param("id"))); CustomerDao dao = CustomerDao.instance(); Customer customer = dao.getCustomerById(id).get(); if (customer == null) { ctx.html("Not Found"); } else { ctx.json(customer); } }; }
Now you can compile the code using the command below:
Compile Command
mvn package
You can execute the code using the command below:
Execute Command
mvn exec:java -Dexec.mainCls=org.javacodegeeks.javalin.JavalinExample
2.9 Create a REST Endpoint
Now you need to add the new routes for customers, and customers/:id.
Example with New Routes
package org.javacodegeeks.javalin; import org.javacodegeeks.javalin.Customer.CustomerController; import io.javalin.Javalin; public class JavalinExample { public static void main(String[] args) { Javalin example = Javalin.create() .port(7000) .start(); example.get("/example", ctx -> ctx.html("Ths is a Javalin Example")); example.get("/customers", CustomerController.fetchAllCustomernames); example.get("/customers/:id", CustomerController.fetchById); } }
You can access the Javalin RESTAPI routes example, customers, customers/:id using the following urls: http://localhost:7000/example, http://localhost:7000/customers,http://localhost:7000/customers/1. The output for the above urls is shown below:
Example Route Output
This is a Javalin Example
Customers Route Output
["George Smith","Tania Rogers","Carol Smith"]
Customers/:id Route Output
{"id":1,"name":"Tania Rogers","ssn":231872636}
3. Download the Source Code
You can download the full source code of this example here: Javalin REST API