[Spring Boot] 폼 데이터 주고 받기
Updated:
폼 데이터 주고 받기
CRUD (Create, Read, Update, Delete)
form data : <form> 태그에 담긴 데이터 (택배 상자에 비유)
form 태그에 where, how를 기재하여 전송, Controller는 객체에 담아 받는다.
DTO(Data Transfer Object) : form data를 받는 객체
실습
입력 폼 만들기
-
resources/templates에 articles 디렉토리 생성 > new.mustache 파일 생성
-
new.mustache
<form action="">
<input type="text">
<textarea></textarea>
<button type="submit">제출</button>
</form>
컨트롤러 추가
-
src/main/java/com.example.firstProject/controller 에 ArticleController java class 생성
-
ArticleController.java
@Controller
public class ArticleController {
@GetMapping("/articles/new")
public String newArticleForm() {
return "articles/new";
}
}
- 서버를 실행해 http://localhost:8080/articles/new 로 잘 접속 되는지 확인
- new.mustache에 bootstrap 코드 추가
<form class="container">
<div class="mb-3">
<label class="form-label">제목</label>
<input type="text" class="form-control">
</div>
<div class="mb-3">
<label class="form-label">내용</label>
<textarea class="form-control" rows="3"></textarea>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
현재 상태에서 데이터를 입력하고 submit하면 아무일도 일어나지 않는다. 어디로 갈지 어떻게 보낼지 정보를 적어주지 않았기 때문에
폼 데이터 전송
action : 어디로 보낼지 method : 어떻게 보낼지 (post | get)
- new.mustach form 태그에 action, method 추가
<form class="container" action="/articles/create", method="post">
폼 데이터 받기
- ArticleController.java에 아래 코드 추가. PostMapping
@PostMapping("/articles/create")
public String createArticle() {
return "";
}
DTO 작성
form data를 받기위해 DTO 객체 생성
- src/main/java/com.example.firstProject 에 dto 패키지 생성
- ArticleForm.java 클래스 생성
- 변수 선언 후,우클릭 -> Generate -> Constructor 로 각 변수에 대해 생성자 선언해주기
- 우클릭 -> Generate -> toString() 코드 생성
package com.example.firstProject.dto;
public class ArticleForm {
private String title;
private String content;
public ArticleForm(String title, String content) {
this.title = title;
this.content = content;
}
@Override
public String toString() {
return "ArticleForm{" +
"title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
- DTO 객체를 Controller에서 받을 수 있도록 ArticleController 의 createArticle 메소드의 파라미터로 넣어주기
@PostMapping("/articles/create")
public String createArticle(ArticleForm form) {
System.out.println(form.toString());
return "";
}
실행을 하고 submit을 하면 오류가 난다. Console을 확인해보면 아래와 같이 나오는걸 볼 수 있다.
ArticleForm{title='null', content='null'}
form에서 ArticleForm의 변수(title, content)에 대한 변수를 지정해주지 않았기 때문
입력값 이름 주기
- new.mustache 파일에서 input, textarea 태그에 name 속성을 추가해 변수명 입력
<input type="text" class="form-control" name="title">
<textarea class="form-control" rows="3" name="content"></textarea>
- 서버 재실행
Console 로그에 입력한 내용이 출력 되는 것을 확인할 수 있다.
ArticleForm{title='abcd', content='12345'}
Leave a comment