์ด์ ๊ฒ์๋ฌผ์์ REST api ๋ฅผ ์๋์ ๊ฐ์ด ๊ฐ๋จํ ๋ช ์ธํ์๋ค. ์์ง DB ์ ์ฐ๊ฒฐํ์ง ์์์ผ๋ ์ด๋๋ก ์ปจํธ๋กค๋ฌ์ ์๋น์ค์ ํ์ ๋ง๋ค์ด๋ณด๊ฒ ๋ค.
Description | HTTP method | Route |
todo list ๋ฅผ ๊ฐ์ ธ์จ๋ค | GET | /todos |
todo ๋ฅผ ๊ฐ์ ธ์จ๋ค | GET | /todo/:id |
todo ๋ฅผ ์์ฑํ๋ค | POST | /todo |
todo ๋ฅผ ์์ ํ๋ค | PUT or PATCH | /todo/:id |
todo ๋ฅผ ์ญ์ ํ๋ค | DELETE | /todo/:id |
/todo/TodoItemService.java
์ฝ๋๊ฐ ํ๋ ๋ฟ์ด๋ฏ๋ก todo ๋ฐ๋ก ์๋์ ํด๋์ค๋ฅผ ์์ฑํด์ค๋ค. ์์ ๋ด์ฉ์ DB ์ฐ๊ฒฐ ํ ์์ฑํด์ค ๊ฒ์ด๋ค.
package com.todolist.tutorial.todo;
import com.todolist.tutorial.todo.model.TodoItem;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TodoItemService {
public List<TodoItem> getTodos() {
}
public TodoItem getTodoById(final Long id) {
}
public TodoItem createTodo(final TodoItem createTodoItem) {
}
public TodoItem updateTodo(final long id, final TodoItem updateTodoItem) {
}
public void deleteTodoById(final Long id) {
}
}
/todo/TodoItemController.java
๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ๋๊ฐ ํ๋ ๋ฟ์ด๋ฏ๋ก todo ํจํค์ง ๋ฐ๋ก ์๋์ ํด๋์ค๋ฅผ ์์ฑํด์ค๋ค. ์๋น์ค ์ธ์คํด์ค๋ฅผ ์ปจํธ๋กค๋ฌ์ ์ฃผ์ ํด์ฃผ๊ธฐ ์ํด @Autowired ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ฃผ์๋ค. @RequestBody, @ResponseBody ๋ JSON -> ์๋ฐ๊ฐ์ฒด, ์๋ฐ๊ฐ์ฒด -> JSON ์ผ๋ก ๋ณํํด์ฃผ๋ ์ด๋ ธํ ์ด์ ์ด๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ๋ชจ๋ ์๋ต์ JSON ์ผ๋ก ํด์ค ๊ฒ์ด๋ค.
package com.todolist.tutorial.todo;
import com.todolist.tutorial.todo.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/todos")
public class TodoItemController {
@Autowired
private TodoItemService todoItemService;
private final static String DEFAULT_ERR_MSG = "no errors";
//๋ชจ๋ todo or errors ๋ฅผ ์๋ตํ๋ค.
@RequestMapping(method = RequestMethod.GET)
public @ResponseBody TodoItemListResponse getTodos() {
String errors = DEFAULT_ERR_MSG;
List<TodoItem> todoItems = null;
try {
todoItems = todoItemService.getTodos();
} catch(final Exception e){
errors = e.getMessage();
}
return TodoItemAdapter.todoItemListResponse(todoItems, errors);
}
//id์ ํด๋นํ๋ todo ํ๋ or errors ๋ฅผ ์๋ตํ๋ค.
@RequestMapping(method = RequestMethod.GET, value = "/{id}")
public @ResponseBody TodoItemResponse getTodoById(@PathVariable(value = "id") Long id) {
String errors = DEFAULT_ERR_MSG;
TodoItem todoItem = null;
try {
todoItem = todoItemService.getTodoById(id);
} catch (final Exception e) {
errors = e.getMessage();
}
return TodoItemAdapter.todoItemResponse(todoItem, errors);
}
//์๋ก์ด todo ํ๋๋ฅผ ์์ฑํ๊ณ , ์์ฑํ ํฌ๋ or errors ๋ฅผ ์๋ตํ๋ค.
@RequestMapping(method = RequestMethod.POST)
public @ResponseBody TodoItemResponse createTodo(@RequestBody final TodoItemRequest todoItemRequest) {
String errors = DEFAULT_ERR_MSG;
TodoItem createTodoItem = TodoItemAdapter.todoItem(todoItemRequest);
try {
createTodoItem = todoItemService.createTodo(createTodoItem);
} catch (final Exception e) {
errors = e.getMessage();
}
return TodoItemAdapter.todoItemResponse(createTodoItem, errors);
}
//todo ํ๋๋ฅผ ์์ ํ๊ณ , ์์ ํ todo or errors ๋ฅผ ์๋ตํ๋ค.
@RequestMapping(method = RequestMethod.PUT, value = "/{id}")
public @ResponseBody TodoItemResponse updateTodo(@PathVariable(value = "id") final Long id, @RequestBody final TodoItemRequest todoItemRequest) {
String errors = DEFAULT_ERR_MSG;
TodoItem updateTodoItem = TodoItemAdapter.todoItem(todoItemRequest);
try {
updateTodoItem = todoItemService.updateTodo(id, updateTodoItem);
} catch (final Exception e) {
errors = e.getMessage();
}
return TodoItemAdapter.todoItemResponse(updateTodoItem, errors);
}
//id์ ํด๋นํ๋ todo ๋ฅผ ์ญ์ ํ๊ณ null or errors ๋ฅผ ์๋ตํ๋ค.
@RequestMapping(method = RequestMethod.DELETE, value = "/{id}")
public @ResponseBody TodoItemResponse deleteTodoById(@PathVariable(value = "id") Long id) {
String errors = DEFAULT_ERR_MSG;
try {
todoItemService.deleteTodoById(id);
} catch (final Exception e) {
errors = e.getMessage();
}
return TodoItemAdapter.todoItemResponse(null, errors);
}
}
๋ฐ์ํ