Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9c38800214 | |||
| e8260b1700 |
11
build.gradle
11
build.gradle
@@ -1,6 +1,7 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'war'
|
id 'war'
|
||||||
id 'org.gretty' version '2.2.0'
|
id 'org.gretty' version '2.2.0'
|
||||||
|
id 'io.franzbecker.gradle-lombok' version '1.14'
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
@@ -11,9 +12,19 @@ repositories {
|
|||||||
sourceCompatibility = 10
|
sourceCompatibility = 10
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
|
||||||
|
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.7'
|
||||||
|
|
||||||
|
compile 'com.fasterxml.jackson.core:jackson-databind:2.9.6'
|
||||||
|
|
||||||
compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
|
compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
gretty {
|
gretty {
|
||||||
contextPath = '/'
|
contextPath = '/'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lombok {
|
||||||
|
version = '1.18.2'
|
||||||
|
sha256 = ""
|
||||||
|
}
|
||||||
|
|||||||
10
src/main/java/DTO/Order.java
Normal file
10
src/main/java/DTO/Order.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package DTO;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public @Data class Order {
|
||||||
|
private int id;
|
||||||
|
private String orderNumber;
|
||||||
|
private List<OrderItem> orderRows;
|
||||||
|
}
|
||||||
9
src/main/java/DTO/OrderItem.java
Normal file
9
src/main/java/DTO/OrderItem.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package DTO;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
public @Data class OrderItem {
|
||||||
|
private String itemName;
|
||||||
|
private Integer quantity;
|
||||||
|
private Integer price;
|
||||||
|
}
|
||||||
@@ -1,42 +1,72 @@
|
|||||||
package api;
|
package api;
|
||||||
|
|
||||||
|
import DTO.Order;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContextEvent;
|
||||||
|
import javax.servlet.ServletContextListener;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.annotation.WebListener;
|
||||||
import javax.servlet.annotation.WebServlet;
|
import javax.servlet.annotation.WebServlet;
|
||||||
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServlet;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.regex.Matcher;
|
import java.util.HashMap;
|
||||||
import java.util.regex.Pattern;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@WebServlet("/api/orders")
|
@WebServlet(urlPatterns = "/api/orders", name="Orders")
|
||||||
public class Orders extends HttpServlet {
|
@WebListener
|
||||||
|
public class Orders extends HttpServlet implements ServletContextListener {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private int lastOrderId = 0;
|
private static int nextOrderId = 0;
|
||||||
private Pattern orderPattern = Pattern.compile(".*\"orderNumber\":\\s*\"(.*)\".*");
|
private static Map orders = new HashMap<Integer, Order>();
|
||||||
|
|
||||||
|
public int addOrder(Order order) {
|
||||||
|
int orderId = nextOrderId;
|
||||||
|
nextOrderId++;
|
||||||
|
order.setId(orderId);
|
||||||
|
orders.put(orderId, order);
|
||||||
|
return orderId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||||
resp.getWriter().format("%d", lastOrderId);
|
String idString = req.getParameter("id");
|
||||||
|
if (idString != null) {
|
||||||
|
int id = Integer.parseInt(idString);
|
||||||
|
Order order = (Order) orders.get(id);
|
||||||
|
if (order == null) {
|
||||||
|
resp.setStatus(404);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resp.setContentType("application/json");
|
||||||
|
resp.getWriter().print(new ObjectMapper().writeValueAsString(order));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resp.getWriter().format("%s %d", getServletName(), orders.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||||
resp.setContentType("application/json");
|
resp.setContentType("application/json");
|
||||||
String order = req.getReader().lines().collect(Collectors.joining(" "));
|
String orderJson = req.getReader().lines().collect(Collectors.joining(" "));
|
||||||
int orderId = lastOrderId++;
|
|
||||||
Matcher matcher = orderPattern.matcher(order);
|
|
||||||
boolean matches = matcher.matches();
|
|
||||||
|
|
||||||
if (matches && matcher.groupCount() > 0) {
|
Order order = new ObjectMapper().readValue(orderJson, Order.class);
|
||||||
String orderNumber = matcher.group(1);
|
addOrder(order);
|
||||||
System.out.format("request data: %s, orderNumber: %s\n", order, orderNumber);
|
resp.getWriter().print(new ObjectMapper().writeValueAsString(order));
|
||||||
resp.getWriter().printf("{\"id\": %d, \"orderNumber\": \"%s\"}", orderId, orderNumber);
|
|
||||||
} else {
|
|
||||||
resp.getWriter().print("\"Invalid request\"");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void contextInitialized(ServletContextEvent sce) {
|
||||||
|
// fixme horrible hack
|
||||||
|
sce.getServletContext().setAttribute("Orders", this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void contextDestroyed(ServletContextEvent sce) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
src/main/java/form/Index.java
Normal file
17
src/main/java/form/Index.java
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package form;
|
||||||
|
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.annotation.WebServlet;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@WebServlet(urlPatterns = "/", name="Index")
|
||||||
|
public class Index extends HttpServlet {
|
||||||
|
|
||||||
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
response.setContentType("text/html; charset=utf-8");
|
||||||
|
response.getWriter().print("<a href=/orders/form>Orders form</a>");
|
||||||
|
}
|
||||||
|
}
|
||||||
50
src/main/java/form/OrdersForm.java
Normal file
50
src/main/java/form/OrdersForm.java
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
package form;
|
||||||
|
|
||||||
|
import DTO.Order;
|
||||||
|
import api.Orders;
|
||||||
|
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.annotation.WebServlet;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@WebServlet(urlPatterns = "/orders/form", name="OrdersForm")
|
||||||
|
public class OrdersForm extends HttpServlet
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||||
|
|
||||||
|
resp.setContentType("text/html; charset=utf-8");
|
||||||
|
resp.getWriter().print(
|
||||||
|
"<form method=post>" +
|
||||||
|
"<label for=orderNumber>Order Number</label> " +
|
||||||
|
"<input type=text name=orderNumber></input> " +
|
||||||
|
"<input type=submit></input>" +
|
||||||
|
"</form>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||||
|
resp.setContentType("application/json");
|
||||||
|
// fixme horrible hack
|
||||||
|
Orders orders = (Orders) getServletContext().getAttribute("Orders");
|
||||||
|
if (orders == null) {
|
||||||
|
throw new NullPointerException("Orders servlet not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
String orderNumber = req.getParameter("orderNumber");
|
||||||
|
if (orderNumber == null) {
|
||||||
|
resp.setStatus(400, "orderNumber parameter is empty");
|
||||||
|
resp.getWriter().print("orderNumber parameter is empty");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Order order = new Order();
|
||||||
|
order.setOrderNumber(orderNumber);
|
||||||
|
int orderId = orders.addOrder(order);
|
||||||
|
resp.getWriter().format("%d", orderId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@ import javax.servlet.http.HttpServlet;
|
|||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
@WebServlet("/hello")
|
@WebServlet(urlPatterns = "/hello", name="Hello")
|
||||||
public class HelloServlet extends HttpServlet {
|
public class HelloServlet extends HttpServlet {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user