spring boot 입문 -2
form 데이터란? HTML 요소인 form 태그에 담긴 데이터
폼 데이터는 택배 상자 에 비유 가능함.
그래서 폼 데이터에도 어디(where)로 보낼지, 어떻게(how)보낼지를 기재할 필요가 있음.
Controller는 이 데이터를 객체에 담아 받음.
이때, form 데이터를 받는 객체를 DTO(Data Transfer Object)라고 부름.
Create란 => 사용자의 입력이 DB에 저장되는 과정.
main/resources/templates에 article package 생성 후, new.mustache 생성
(main/resources/templates/article/new.mustache)
입력폼 작성
1.
form tag에 action과 method를 이용해서 어디로(where)보낼지, 어떻게(how) 보낼지 받음.
어디로 보낼지: action / 어떻게 보낼지: method
<form class = "container" action = "/articles/create" method="post">
2.
dto의 filed명과 입력받는 form data의 name 은 같아야한다.
<input type="text" class="form-control" name = "title">
<textarea class="form-control" rows="3" name = "content"></textarea>
3. 전체
{{>layouts/header}}
<form class = "container" action = "/articles/create" method="post">
<div class="mb-3">
<label class="form-label">제목</label>
<input type="text" class="form-control" name = "title">
</div>
<div class="mb-3">
<label class="form-label">내용</label>
<textarea class="form-control" rows="3" name = "contents"></textarea>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
{{>layouts/footer}}
Controller 작성
controller/ArticleController/ArticleController.java 생성
다음과 같이 작성
package com.example.firstproject.controller;
import com.example.firstproject.dto.ArticleForm;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class ArticleController {
@GetMapping("/articles/new")
public String newArticleForm(){
return "articles/new";
}
@PostMapping("/articles/create")
public String createArticle(ArticleForm articleForm){
System.out.println(articleForm.toString());
return "";
}
}
1.
GetMapping("/articles/new") 부분을 통해 view 페이지(articles/new) 반환.
localhost:8080/articles/new 접속하면 다음과 같은 페이지 반환됨.
2-1.
PostMapping("/articles/create")부분을 통해
form tag를 통해 데이터를 던진 것을 이 메소드(PostMapping의 url가 받아서 메소드 실행)가 받음.
던져진 form 데이터는 DTO 객체(즉, 여기선 articleform)에 담겨진다.
2-2.
ArticleForm 작성
package com.example.firstproject.dto;
public class ArticleForm {
private String title;
private String contents;
public ArticleForm(String title, String contents) {
this.title = title;
this.contents = contents;
}
@Override
public String toString() {
return "ArticleForm{" +
"title='" + title + '\'' +
", contents='" + contents + '\'' +
'}';
}
}
2-2-1.
title, contents 는 form tag에서 입력받는 name 속성과 같은 변수명이여야함.
2-2-2.
command + N 을 통해 Constructor(생성자), toString() 을 자동 생성할 수 있다.
번외) - 여기서부터는 작성자 본인의 경험을 토대로 짧게 작성하는 글이므로 틀린 부분이 있을 수 있습니다.
1. Annotation
Spring boot에서는 편리한 많은 annotation들을 제공하는데, 개발 상황에 따라 어떤 어노테이션을 쓸지 결정하여 사용하면 되는 것으로 알고 있다.
예를들어 현재 실습에서는 @Controller를 사용하고 있는데, json으로 통신을 하게 될 경우 @RestController을 사용하게 된다.
또한, ArticleForm에서 생성자와 toString을 전부 하나하나 선언을 해주었는데,
이 또한 자동 생성해주는 annotation이 존재한다.( Lombok annotation 참고)
2.
또한 현재는 ArticleForm 이라고 명시를 하며 받고 있는데, 개발 성격마다 다르겠지만
파라미터로 바로 받을 수 있거나(@RequestParam 등) 또는 나중에 @RequestBody등을 사용하여 ArticleReq(단지 클래스 명임)오 요청을 받고, ArticleRes로 요청을 내보내는등의 방법도 다양하다.
출처:
이 글은 https://www.youtube.com/watch?v=_vDACE13Ubc&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt 의 강의를 보고 정리한 글입니다.