오늘 배운 것
- TODO Project에서 todo Rest API 서버 만들기
앞의 TODO project의 User Rest API 서버 만들기와 같음
package todoApp.rest.todo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
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 com.google.gson.Gson;
import todoApp.dao.TodoDao;
import todoApp.dao.TodoDaoImpl;
import todoApp.dao.UserDao;
import todoApp.model.Todo;
import todoApp.model.User;
import todoApp.rest.user.UserResult;
@WebServlet(urlPatterns = "/api/todo/*", loadOnStartup = 1)
public class TodoRestServlet extends HttpServlet {
private TodoDao todoDao = new TodoDaoImpl();
private Gson gson = new Gson();
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("TodoRestServlet init() 호출됨");
}
private void sendResponse(String strJson, HttpServletResponse response) throws IOException {
response.setContentType("application/json; charset = UTF-8");
PrintWriter out = response.getWriter();
out.println(strJson);
// out.flush();
out.close(); // close에 flush가 포함되어 있음
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TodoRestServlet doGet() 호출됨");
// 레코드 한개 조회
// http://localhost:8090/todo/api/todo?category=one&id=1
// 레코드 특정 사용자의 데이터(여러개) 조회
// http://localhost:8090/todo/api/todo?category=mine&username=hong
// 레코드 전체(여러개) 조회
// http://localhost:8090/todo/api/todo?category=all
String category = request.getParameter("category");
String strJson = "";
if (category.equals("one")) {
strJson = processGetOne(request);
} else if (category.equals("mine")) {
strJson = processGetMine(request);
} else if (category.equals("all")) {
strJson = processGetAll(request);
}
sendResponse(strJson, response);
}
private String processGetOne(HttpServletRequest request) {
String strId = request.getParameter("id");
long id = Long.parseLong(strId);
Todo todo = todoDao.selectTodo(id);
TodoOneResult todoOneResult = new TodoOneResult();
if (todo != null) {
todoOneResult.setTodo(todo);
todoOneResult.setHasResult(true);
} else {
todoOneResult.setHasResult(false);
}
String strJson = gson.toJson(todoOneResult);
System.out.println("strJson = " + strJson);
return strJson;
}
private String processGetMine(HttpServletRequest request) {
String username = request.getParameter("username");
List<Todo> todoList = todoDao.selectTodoByUsername(username);
TodoListResult todoListResult = new TodoListResult();
if (todoList.size() > 0) {
todoListResult.setTodoList(todoList);
todoListResult.setHasResult(true);
todoListResult.setTotalCount(todoList.size());
} else {
todoListResult.setHasResult(false);
todoListResult.setTotalCount(todoList.size());
}
String strJson = gson.toJson(todoListResult);
System.out.println("strJson = " + strJson);
return strJson;
}
private String processGetAll(HttpServletRequest request) {
List<Todo> todoList = todoDao.selectAllTodos();
TodoListResult todoListResult = new TodoListResult();
if (todoList.size() > 0) {
todoListResult.setTodoList(todoList);
todoListResult.setHasResult(true);
todoListResult.setTotalCount(todoList.size());
} else {
todoListResult.setHasResult(false);
todoListResult.setTotalCount(todoList.size());
}
String strJson = gson.toJson(todoListResult);
System.out.println("strJson = " + strJson);
return strJson;
} // doGet
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TodoRestServlet doPost() 호출됨");
request.setCharacterEncoding("utf-8"); // 한글처리
BufferedReader reader = request.getReader(); // 문자 입력 스트림 가져오기
Todo todo = gson.fromJson(reader, Todo.class); // JSON 문자열로부터 User 객체로 변환
System.out.println(todo.toString());
todoDao.insertTodo(todo); // 새 할일 추가
TodoResult todoResult = new TodoResult();
todoResult.setSuccess(true);
String strJson = gson.toJson(todoResult);
sendResponse(strJson, response);
// PostMan으로 POST요청시 이런 형식으로 보내야 함(LocalDate에 여러 값을 가지고 있어서 객체형식으로 표현됨)
// {
// "title" : "할일 1004",
// "description" : "할일 1004번쨰......",
// "username" : "asd",
// "targetDate": {
// "year": 2022,
// "month": 3,
// "day": 04
// },
// "status" : false
// }
} //doPost
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TodoRestServlet doPut() 호출됨");
request.setCharacterEncoding("utf-8"); // 한글처리
BufferedReader reader = request.getReader(); // 문자 입력 스트림 가져오기
Todo todo = gson.fromJson(reader, Todo.class); // JSON 문자열로부터 User 객체로 변환
System.out.println(todo.toString());
todoDao.updateTodo(todo); // 할일 수정
TodoResult todoResult = new TodoResult();
todoResult.setSuccess(true);
String strJson = gson.toJson(todoResult);
sendResponse(strJson, response);
} //doPut
@Override
protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TodoRestServlet doDelete() 호출됨");
// 레코드 한개 삭제
// http://localhost:8090/todo/api/todo?category=one&id=1
// 레코드 특정 사용자의 데이터(여러개) 삭제
// http://localhost:8090/todo/api/todo?category=mine&username=hong
String category = request.getParameter("category");
String strJson = "";
if (category.equals("one")) {
strJson = processDeleteOne(request);
} else if (category.equals("mine")) {
strJson = processDeleteMine(request);
}
sendResponse(strJson, response);
}// doDelete
private String processDeleteOne(HttpServletRequest request) {
String strid = request.getParameter("id");
long id = Long.parseLong(strid);
todoDao.deleteTodo(id); // 글 번호 id에 해당하는 글 하나 삭제
TodoResult todoResult = new TodoResult();
todoResult.setSuccess(true);
String strJson = gson.toJson(todoResult);
return strJson;
}
private String processDeleteMine(HttpServletRequest request) {
String username = request.getParameter("username");
todoDao.deleteTodo(username); // 글 번호 id에 해당하는 글 하나 삭제
TodoResult todoResult = new TodoResult();
todoResult.setSuccess(true);
String strJson = gson.toJson(todoResult);
return strJson;
}
@Override
public void destroy() {
System.out.println("TodoRestServlet destroy() 호출됨");
}// destroy
}