diff --git a/pom.xml b/pom.xml
index 6d26517999..661b80fca5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -94,6 +94,7 @@
resteasy
selenium-junit-testng
+ spark-java
spring-akka
spring-amqp
spring-all
diff --git a/spark-java/pom.xml b/spark-java/pom.xml
new file mode 100644
index 0000000000..5b8923322a
--- /dev/null
+++ b/spark-java/pom.xml
@@ -0,0 +1,29 @@
+
+
+ 4.0.0
+ com.baeldung
+ spark-java
+ 0.1.0-SNAPSHOT
+ spark-java
+ http://maven.apache.org
+
+ UTF-8
+ 1.8
+ 1.8
+
+
+
+ com.sparkjava
+ spark-core
+ 2.5.4
+
+
+
+ com.google.code.gson
+ gson
+ 2.8.0
+
+
+
diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/HelloWorldService.java b/spark-java/src/main/java/com/baeldung/sparkjava/HelloWorldService.java
new file mode 100644
index 0000000000..55b3fbe3f2
--- /dev/null
+++ b/spark-java/src/main/java/com/baeldung/sparkjava/HelloWorldService.java
@@ -0,0 +1,12 @@
+package com.baeldung.sparkjava;
+import static spark.Spark.*;
+
+public class HelloWorldService {
+ public static void main(String[] args) {
+ get("/hello", (req,res)->"Hello, Baeldung");
+
+ get("/hello/:name", (req,res)->{
+ return "Hello: "+ req.params(":name");
+ });
+ }
+}
diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/SparkRestExample.java b/spark-java/src/main/java/com/baeldung/sparkjava/SparkRestExample.java
new file mode 100644
index 0000000000..bb610fd7f0
--- /dev/null
+++ b/spark-java/src/main/java/com/baeldung/sparkjava/SparkRestExample.java
@@ -0,0 +1,76 @@
+package com.baeldung.sparkjava;
+
+import static spark.Spark.delete;
+import static spark.Spark.get;
+import static spark.Spark.options;
+import static spark.Spark.post;
+import static spark.Spark.put;
+
+import com.google.gson.Gson;
+
+public class SparkRestExample {
+ public static void main(String[] args) {
+ final UserService userService = new UserServiceMapImpl();
+
+ post("/users", (request, response) -> {
+ response.type("application/json");
+
+ User user = new Gson().fromJson(request.body(), User.class);
+ userService.addUser(user);
+
+ return new Gson().toJson(new StandardResponse(StatusResponse.SUCCESS));
+ });
+
+ get("/users", (request, response) -> {
+ response.type("application/json");
+
+ return new Gson().toJson(
+ new StandardResponse(StatusResponse.SUCCESS,new Gson()
+ .toJsonTree(userService.getUsers())));
+ });
+
+ get("/users/:id", (request, response) -> {
+ response.type("application/json");
+
+ return new Gson().toJson(
+ new StandardResponse(StatusResponse.SUCCESS,new Gson()
+ .toJsonTree(userService.getUser(request.params(":id")))));
+ });
+
+ put("/users/:id", (request, response) -> {
+ response.type("application/json");
+
+ User toEdit = new Gson().fromJson(request.body(), User.class);
+ User editedUser = userService.editUser(toEdit);
+
+ if (editedUser != null) {
+ return new Gson().toJson(
+ new StandardResponse(StatusResponse.SUCCESS,new Gson()
+ .toJsonTree(editedUser)));
+ }else {
+ return new Gson().toJson(
+ new StandardResponse(StatusResponse.ERROR,new Gson()
+ .toJson("User not found or error in edit")));
+ }
+ });
+
+ delete("/users/:id", (request, response) -> {
+ response.type("application/json");
+
+ userService.deleteUser(request.params(":id"));
+ return new Gson().toJson(
+ new StandardResponse(StatusResponse.SUCCESS, "user deleted"));
+ });
+
+ options("/users/:id", (request, response) -> {
+ response.type("application/json");
+
+ return new Gson().toJson(
+ new StandardResponse(StatusResponse.SUCCESS,
+ (userService.userExist(
+ request.params(":id"))) ? "User exists" : "User does not exists" ));
+ });
+
+ }
+
+}
diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/StandardResponse.java b/spark-java/src/main/java/com/baeldung/sparkjava/StandardResponse.java
new file mode 100644
index 0000000000..51f1954e57
--- /dev/null
+++ b/spark-java/src/main/java/com/baeldung/sparkjava/StandardResponse.java
@@ -0,0 +1,47 @@
+package com.baeldung.sparkjava;
+
+import com.google.gson.JsonElement;
+
+public class StandardResponse {
+ private StatusResponse status;
+ private String message;
+ private JsonElement data;
+
+ public StandardResponse(StatusResponse status) {
+ this.status = status;
+ }
+
+ public StandardResponse(StatusResponse status, String message) {
+ this.status = status;
+ this.message = message;
+ }
+
+ public StandardResponse(StatusResponse status, JsonElement data) {
+ this.status = status;
+ this.data = data;
+ }
+
+ public StatusResponse getStatus() {
+ return status;
+ }
+
+ public void setStatus(StatusResponse status) {
+ this.status = status;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public JsonElement getData() {
+ return data;
+ }
+
+ public void setData(JsonElement data) {
+ this.data = data;
+ }
+}
diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/StatusResponse.java b/spark-java/src/main/java/com/baeldung/sparkjava/StatusResponse.java
new file mode 100644
index 0000000000..0e3137293a
--- /dev/null
+++ b/spark-java/src/main/java/com/baeldung/sparkjava/StatusResponse.java
@@ -0,0 +1,17 @@
+package com.baeldung.sparkjava;
+
+public enum StatusResponse {
+ SUCCESS ("Success"),
+ ERROR ("Error");
+
+ final private String status;
+
+ StatusResponse(String status) {
+ this.status = status;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+}
diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/User.java b/spark-java/src/main/java/com/baeldung/sparkjava/User.java
new file mode 100644
index 0000000000..7447671470
--- /dev/null
+++ b/spark-java/src/main/java/com/baeldung/sparkjava/User.java
@@ -0,0 +1,59 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.baeldung.sparkjava;
+
+class User {
+
+ private String id;
+ private String firstName;
+ private String lastName;
+ private String email;
+
+ public User(String id, String firstName, String lastName, String email) {
+ super();
+ this.id = id;
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.email = email;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuffer().append(getEmail()).toString();
+ }
+}
diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/UserException.java b/spark-java/src/main/java/com/baeldung/sparkjava/UserException.java
new file mode 100644
index 0000000000..929c0dfdb7
--- /dev/null
+++ b/spark-java/src/main/java/com/baeldung/sparkjava/UserException.java
@@ -0,0 +1,13 @@
+package com.baeldung.sparkjava;
+
+public class UserException extends Exception{
+
+ public UserException() {
+ super();
+ }
+
+ public UserException(String message) {
+ super(message);
+ }
+
+}
diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/UserService.java b/spark-java/src/main/java/com/baeldung/sparkjava/UserService.java
new file mode 100644
index 0000000000..9b1fa7be3a
--- /dev/null
+++ b/spark-java/src/main/java/com/baeldung/sparkjava/UserService.java
@@ -0,0 +1,12 @@
+package com.baeldung.sparkjava;
+
+import java.util.Collection;
+
+public interface UserService {
+ public void addUser (User user) ;
+ public Collection getUsers () ;
+ public User getUser (String id) ;
+ public User editUser (User user) throws UserException;
+ public void deleteUser (String id) ;
+ public boolean userExist (String id);
+}
diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/UserServiceMapImpl.java b/spark-java/src/main/java/com/baeldung/sparkjava/UserServiceMapImpl.java
new file mode 100644
index 0000000000..0b5072647f
--- /dev/null
+++ b/spark-java/src/main/java/com/baeldung/sparkjava/UserServiceMapImpl.java
@@ -0,0 +1,68 @@
+package com.baeldung.sparkjava;
+
+import java.util.Collection;
+import java.util.HashMap;
+
+public class UserServiceMapImpl implements UserService{
+ private HashMap userMap;
+
+ public UserServiceMapImpl() {
+ userMap = new HashMap<>();
+ }
+
+ @Override
+ public void addUser (User user) {
+ userMap.put(user.getId(), user);
+ }
+
+ @Override
+ public Collection getUsers () {
+ return userMap.values();
+ }
+
+ @Override
+ public User getUser (String id) {
+ return userMap.get(id);
+ }
+
+ @Override
+ public User editUser (User forEdit) throws UserException{
+ try{
+ if (forEdit.getId() == null)
+ throw new UserException("ID cannot be blank");
+
+ User toEdit = userMap.get(forEdit.getId());
+
+ if (toEdit == null )
+ throw new UserException("User not found");
+
+ if (forEdit.getEmail()!=null) {
+ toEdit.setEmail(forEdit.getEmail());
+ }
+ if (forEdit.getFirstName()!=null) {
+ toEdit.setFirstName(forEdit.getFirstName());
+ }
+ if (forEdit.getLastName()!=null) {
+ toEdit.setLastName(forEdit.getLastName());
+ }
+ if (forEdit.getId()!=null) {
+ toEdit.setId(forEdit.getId());
+ }
+
+ return toEdit;
+ }catch (Exception ex) {
+ throw new UserException(ex.getMessage());
+ }
+ }
+
+ @Override
+ public void deleteUser (String id) {
+ userMap.remove(id);
+ }
+
+ @Override
+ public boolean userExist (String id) {
+ return userMap.containsKey(id);
+ }
+
+}