[TaskApp] 3. Controller 만들기
Controller 의 역할 : Service 에 의존관계를 주입 받고 특정 URL 로 오는 요청을 처리 하여 응답을 처리하는 역할을 수행
Service 의 역할 : Controller 에서 받은 요청을 위임받아 핵심 비즈니스 로직을 수행하여 실행하거나 값을 리턴하는 역할을 수행
0. HomeController
/*HomeController.java*/
@Controller
@Slf4j //logging
public class HomeController {
@RequestMapping("/")
public String home() {
log.info("home");
return "home";
}
}
기본 페이지 : "localhost:8080" url 로 연결되는 기본 페이지 매핑이다.
URL : "localhost:8080" -> home.html
(기본 페이지를 별도로 매핑하지 않는다면, 기본 설정인 index.html 로 자동 연결된다. )
※ "@Slf4j" 는 로그작성을 위한 외부라이브러리 호출 어노테이션 이다.
1. MemberController
* 회원 가입 ( "localhost:8080/members/new" - "members/createMemberForm.html" )
GetMapping 으로 "회원 가입 페이지" 화면을 띄워준다.
회원 가입 양식인 MemberForm 을 model 에 실어 보낸다.
PostMapping 으로 "회원 가입 페이지"를 통해 클라이언트로 부터 입력 받은 form 을 통해,
Member 객체를 생성하여 회원 가입 프로세스를 진행한다.
(입력 받은 값이 문제가 있을 경우를 대비해 예외 처리를 해준다.)
회원 가입이 성공한 후, "localhost:8080" 으로 이동한다.
* 회원 목록 조회 ( "localhost:8080/members" - "members/memberList.html" )
GetMapping 으로 "회원 목록 페이지" 에 회원 목록을 띄워준다.
1. 전체 회원을 리스트 형태로 조회한다.
2. 조회한 회원 리스트를 DTO 형태로 변환한다.
3. model 에 싣어서 "회원 목록 페이지" 에 띄운다.
2. TaskController
/*TaskController.java*/
@Controller
@Slf4j //logging
@RequiredArgsConstructor
public class TaskController {
private final MemberService memberService;
private final TaskService taskService;
/**
* Task 등록
*/
//View -> Back-end
//View 로 부터 입력을 받아옴.
@GetMapping("/tasks/new")
public String createForm(Model model) {
log.info("TaskController : createForm");
//Back-end -> View : 존재하는 회원 목록 넘기기
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
//View -> Back-end : 입력한 task 내용 받아오기
model.addAttribute("taskForm", new TaskForm());
return "tasks/createTaskForm";
}
//SAVE TASK : Task 저장을 위한 Post 요청
//Back-end -> DB
@PostMapping("/tasks/new")
public String create(@Valid TaskForm form, BindingResult result) {
if (result.hasErrors()) {
return "tasks/createTaskForm";
}
Task task = new Task(form.getTitle(), form.getDesc(), memberService.findOne(form.getMemberId()));
taskService.registerTask(task);
return "redirect:/";
}
/**
* Task 조회
*/
//SHOW TASKS : 전체 TaskList 보여주기
//DB -> View
@GetMapping("/tasks")
public String list(Model model) {
List<Task> tasks = taskService.findTasks();
//Task -> TaskDto 변환 후 반환
List<TaskDto> collect = tasks.stream()
.map(t -> new TaskDto(t.getId(), t.getTitle(), t.getDesc(), t.getMember().getName(), t.getCreatedDate()))
.collect(Collectors.toList());
model.addAttribute("tasks", collect);
return "tasks/taskList";
}
/**
* Task 수정
*/
//수정 Task 기존 내용 불러오기
@GetMapping("/tasks/{taskId}/edit")
public String updateTaskForm(@PathVariable("taskId") Long taskId, Model model) {
//수정할 task
Task findTask = taskService.findOne(taskId);
TaskForm form = new TaskForm();
form.setId(findTask.getId());
form.setTitle(findTask.getTitle());
form.setDesc(findTask.getDesc());
form.setMemberId(findTask.getMember().getId());
model.addAttribute("form", form);
//Back-end -> View : 존재하는 회원 목록 넘기기
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "tasks/updateTaskForm";
}
//수정 Task 수정 내용 저장
@PostMapping("/tasks/{taskId}/edit")
public String updateTask(@PathVariable("taskId") Long taskId, @ModelAttribute("form") TaskForm form) {
taskService.controllerUpdateTask(taskId, form.getTitle(), form.getDesc(), form.getMemberId());
return "redirect:/tasks";
}
/**
* Task 삭제
*/
@DeleteMapping("/tasks/{taskId}/delete")
public String deleteTask(@PathVariable("taskId") Long taskId) {
taskService.deleteTask(taskId);
return "redirect:/tasks";
}
}
* Task 등록 / 조회 는 MemberController 와 거의 같기 때문에 생략한다.
* Task 수정
수정 대상의 Task 의 id를 매개 변수로 가져온다.
이를 이용해 "Task 수정 페이지" 에 수정 대상 Task의 내용을 미리 입력해 둔다.
"Task 수정 페이지" 를 통해 클라이언트가 수정한 내용을 form 형식으로 받아 수정을 진행한다.
* Task 삭제
삭제 대상 Task의 id를 매개변수로 가져온다.
이를 통해, 해당 Task를 삭제한다.
(삭제를 위한 Delete 요청은 비교적 신규 기능이기 때문에, 별도의 추가 설정이 필요하다.
이는 "[TaskApp] 4. View 만들기" 에서 자세히 설명하겠다.)