From ea758837cc5486a74ac8ee63eb256625becbbeb9 Mon Sep 17 00:00:00 2001 From: Karan Khanna Date: Thu, 17 May 2018 23:28:12 +0200 Subject: [PATCH] code samples for BAEL-1789 Returning JSON object from a servlet --- javax-servlets/pom.xml | 91 +++++++++++-------- .../java/com/baeldung/model/Employee.java | 72 +++++++++++++++ .../baeldung/servlets/EmployeeServlet.java | 37 ++++++++ .../servlets/EmployeeServletTest.java | 60 ++++++++++++ 4 files changed, 221 insertions(+), 39 deletions(-) create mode 100644 javax-servlets/src/main/java/com/baeldung/model/Employee.java create mode 100644 javax-servlets/src/main/java/com/baeldung/servlets/EmployeeServlet.java create mode 100644 javax-servlets/src/test/java/com/baeldung/servlets/EmployeeServletTest.java diff --git a/javax-servlets/pom.xml b/javax-servlets/pom.xml index 69d952da9c..3970b392f2 100644 --- a/javax-servlets/pom.xml +++ b/javax-servlets/pom.xml @@ -1,46 +1,59 @@ - 4.0.0 - javax-servlets - 1.0-SNAPSHOT + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + javax-servlets + war + 1.0-SNAPSHOT - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} - - - org.apache.httpcomponents - httpclient - ${org.apache.httpcomponents.version} - test - - - commons-logging - commons-logging - - - - - org.springframework - spring-test - ${spring-test.version} - test - - + + + javax.servlet + javax.servlet-api + ${javax.servlet.version} + + + org.apache.httpcomponents + httpclient + ${org.apache.httpcomponents.version} + test + + + commons-logging + commons-logging + + + + + com.google.code.gson + gson + ${gson.version} + + + org.springframework + spring-test + ${spring-test.version} + test + + + org.mockito + mockito-core + 2.18.3 + test + + - - 3.1.0 - 4.5.3 - 5.0.5.RELEASE - + + 3.1.0 + 4.5.3 + 5.0.5.RELEASE + 2.8.4 + \ No newline at end of file diff --git a/javax-servlets/src/main/java/com/baeldung/model/Employee.java b/javax-servlets/src/main/java/com/baeldung/model/Employee.java new file mode 100644 index 0000000000..9a85a69fff --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/model/Employee.java @@ -0,0 +1,72 @@ +package com.baeldung.model; + +public class Employee { + + private int id; + private String name; + private String department; + private Double salary; + + public Employee(int id, String name, String department, Double salary) { + super(); + this.id = id; + this.name = name; + this.department = department; + this.salary = salary; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + id; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Employee other = (Employee) obj; + if (id != other.id) + return false; + return true; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public Double getSalary() { + return salary; + } + + public void setSalary(Double salary) { + this.salary = salary; + } + +} diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/EmployeeServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/EmployeeServlet.java new file mode 100644 index 0000000000..a29f440455 --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/EmployeeServlet.java @@ -0,0 +1,37 @@ +package com.baeldung.servlets; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.baeldung.model.Employee; +import com.google.gson.Gson; + + +@WebServlet(name = "EmployeeServlet", urlPatterns = "/employeeServlet") +public class EmployeeServlet extends HttpServlet { + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws IOException { + + int id = Integer.parseInt(request.getParameter("id")); + String name = request.getParameter("name"); + String department = request.getParameter("department"); + Double salary = Double.parseDouble(request.getParameter("salary")); + + Employee employee = new Employee(id, name, department, salary); + + PrintWriter out = response.getWriter(); + String employeeJsonString = new Gson().toJson(employee); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + out.print(employeeJsonString); + out.flush(); + } + +} diff --git a/javax-servlets/src/test/java/com/baeldung/servlets/EmployeeServletTest.java b/javax-servlets/src/test/java/com/baeldung/servlets/EmployeeServletTest.java new file mode 100644 index 0000000000..a821a30340 --- /dev/null +++ b/javax-servlets/src/test/java/com/baeldung/servlets/EmployeeServletTest.java @@ -0,0 +1,60 @@ +package com.baeldung.servlets; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +import java.io.PrintWriter; +import java.io.StringWriter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import com.baeldung.model.Employee; +import com.google.gson.Gson; + + +@RunWith(MockitoJUnitRunner.class) +public class EmployeeServletTest { + + @Mock + HttpServletRequest httpServletRequest; + + @Mock + HttpServletResponse httpServletResponse; + + Employee employee; + + @Test + public void whenPostRequestToEmployeeServlet_thenCorrect() throws Exception { + + //Given + int id = 1; + String name = "Karan Khanna"; + String department = "IT"; + Double salary = 5000.0; + employee = new Employee(id, name, department, salary); + + //when + when(httpServletRequest.getParameter("id")).thenReturn(String.valueOf(id)); + when(httpServletRequest.getParameter("name")).thenReturn(name); + when(httpServletRequest.getParameter("department")).thenReturn(department); + when(httpServletRequest.getParameter("salary")).thenReturn(String.valueOf(salary)); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + when(httpServletResponse.getWriter()).thenReturn(pw); + + EmployeeServlet employeeServlet = new EmployeeServlet(); + employeeServlet.doPost(httpServletRequest, httpServletResponse); + + String employeeJsonString = sw.getBuffer().toString().trim(); + Employee fetchedEmployee = new Gson().fromJson(employeeJsonString, Employee.class); + assertEquals(fetchedEmployee, employee); + } + +}