[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";
    }
}

0

  • 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>


1

현재 상태에서 데이터를 입력하고 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>
  • 서버 재실행

2

Console 로그에 입력한 내용이 출력 되는 것을 확인할 수 있다.

ArticleForm{title='abcd', content='12345'}

참고

스프링 강의

Leave a comment