- 개인 공부 목적으로 작성한 글입니다.
- 아래 출처를 참고하여 작성하였습니다.
목차
- Intro
- 바인딩 기준
- 샘플 코드
3-1. form 데이터
3-2. RestController
3-3. DTO class - 결과
1. Intro
- Spring RestController에서 form 데이터를 받았을 때 이 값을 어떻게 DTO 객체로 바인딩을 할 수 있는지 알아보겠습니다.
2. 바인딩 기준
- 스프링 MVC가 파라미터로 DTO 객체를 선언해서 자동으로 클라이언트로부터 들어온 폼 데이터 요청 파라미터를 수집할 때
- input 태그의 name 속성과 선언된 DTO 클래스의 멤버변수 이름이 같아야 바인딩을 시켜줍니다.
- 따라서 form 태그를 작성할 때 name속성은 필수 속성으로, 바인딩하고자 하는 DTO 클래스의 멤버변수와 똑같은 이름으로 속성을 부여해야 합니다.
3. 샘플 코드
- 아래 세 가지 컴포넌트에 대한 샘플 코드로 Form 데이터가 어떻게 DTO에 바인딩되는지 알아보겠습니다.
- 전송하고자 하는 form 데이터
- form 데이터 요청을 받는 RestController
- form 데이터가 바인딩 되는 DTO Class
3-1. form 데이터
- 임의로 아래와 같은 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
- 클라이언트로부터 들어온 요청을 처리하는 컨트롤러입니다.
- 파라미터로 DTO 객체를 선언해서 자동으로 클라이언트로부터 들어온 폼 데이터 요청을 받습니다.
@Slf4j
@RestController
public class SampleApiController {
@PostMapping
public void receivePost(FormDto formDto) {
log.info(formDto.toString());
return;
}
}
3-3. DTO class
- 들어온 폼 데이터 요청 파라미터를 수집하여 바인딩하고자 하는 DTO 클래스입니다.
- Setter를 꼭 열어줘야 데이터가 바인딩됩니다.
- Setter를 열어놓지 않으면 데이터가 바인딩되지 않습니다.
@ToString
@NoArgsConstructor
@Setter
@Getter
public class FormDto {
private boolean val1;
private String val2;
}
4. 결과
- 로그를 통해 아래와 같이 DTO에 값이 제대로 바인딩 되었음을 확인할 수 있습니다.
$ : FormDto(val1=true, val2=true)
출처
'SpringBoot > Controller Layer' 카테고리의 다른 글
@RequestBody, @ResponseBody (feat. Jackson 라이브러리 동작방식) (0) | 2021.10.02 |
---|