본문 바로가기
SpringBoot/Controller Layer

Form 데이터 요청을 DTO에 바인딩하는 방법

by BAYABA 2021. 10. 3.
  1. 개인 공부 목적으로 작성한 글입니다.
  2. 아래 출처를 참고하여 작성하였습니다.

목차

  1. Intro
  2. 바인딩 기준
  3. 샘플 코드
    3-1. form 데이터
    3-2. RestController
    3-3. DTO class
  4. 결과

1. Intro

  1. Spring RestController에서 form 데이터를 받았을 때 이 값을 어떻게 DTO 객체로 바인딩을 할 수 있는지 알아보겠습니다.

2. 바인딩 기준

  1. 스프링 MVC가 파라미터로 DTO 객체를 선언해서 자동으로 클라이언트로부터 들어온 폼 데이터 요청 파라미터를 수집할 때
  2. input 태그의 name 속성과 선언된 DTO 클래스의 멤버변수 이름이 같아야 바인딩을 시켜줍니다.
  • 따라서 form 태그를 작성할 때 name속성은 필수 속성으로, 바인딩하고자 하는 DTO 클래스의 멤버변수와 똑같은 이름으로 속성을 부여해야 합니다.

3. 샘플 코드

  1. 아래 세 가지 컴포넌트에 대한 샘플 코드로 Form 데이터가 어떻게 DTO에 바인딩되는지 알아보겠습니다.
  • 전송하고자 하는 form 데이터
  • form 데이터 요청을 받는 RestController
  • form 데이터가 바인딩 되는 DTO Class

3-1. form 데이터

  1. 임의로 아래와 같은 html 파일을 작성 후 form 데이터를 보낼 것입니다.

<!DOCTYPE html>
<html>
    <body>
        <form action="http://localhost:8081/" method="post">
            <label for="uri">URL 주소 입력</label>
            <input type="radio" name="val1" value="true">val1-a</input>
            <input type="radio" name="val1" value="true">val1-b</input>
            <input type="radio" name="val1" value="true">val1-c</input>
            <input type="radio" name="val2" value="true">val2-a</input>
            <input type="radio" name="val2" value="true">val2-b</input>
            <input type="radio" name="val2" value="true">val2-c</input>
            <input type="submit" value="전송" />
          </form>
    </body>
</html>

3-2. RestController

  1. 클라이언트로부터 들어온 요청을 처리하는 컨트롤러입니다.
  2. 파라미터로 DTO 객체를 선언해서 자동으로 클라이언트로부터 들어온 폼 데이터 요청을 받습니다.
@Slf4j
@RestController
public class SampleApiController {

    @PostMapping
    public void receivePost(FormDto formDto) {
        log.info(formDto.toString());
        return;
    }
}

3-3. DTO class

  1. 들어온 폼 데이터 요청 파라미터를 수집하여 바인딩하고자 하는 DTO 클래스입니다.
  2. Setter를 꼭 열어줘야 데이터가 바인딩됩니다.
  • Setter를 열어놓지 않으면 데이터가 바인딩되지 않습니다.
@ToString
@NoArgsConstructor
@Setter
@Getter
public class FormDto {
    private boolean val1;
    private String val2;
}

4. 결과

  1. 로그를 통해 아래와 같이 DTO에 값이 제대로 바인딩 되었음을 확인할 수 있습니다.
$ : FormDto(val1=true, val2=true)

출처

  1. Spring Form데이터 컨트롤러에서 처리