spring boot

spring boot 입문 -2

smilechs 2022. 7. 3. 04:00

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 의 강의를 보고 정리한 글입니다.