1. 데이터 바인딩 (data binding)
- 클라이언트 요청 데이터 → 자바 객체로 변환하는 과정을 뜻함
- 사용자 입력을 데이터 모델 (자바 객체)로 쉽게 매핑 (변환)
⇒ 효율성, 유지보수성, 유효성 검사에 용이
2. Spring MVC 데이터 바인딩
- @RequstParam : GET 방식 ⇒ 쿼리 스트링
- URL을 통한 데이터 전달 (ex. localhost:8080/name=홍길동)
- @ModelAttribute : POST 방식 ⇒ Form 객체
- message의 body에 쿼리 스트링 형식으로 데이터 전달
- @RequestBody : REST API 방식
- 일반적으로 JSON, XML 형식
2-1. @RequestParam 예제
- html
<a th:href="@{/board(boardId=${board.id})}">게시글로 이동</a>
- Controller
@GetMapping("/board")
public String showBoard(@RequestParam("boardId") Long boardId, Model model) {
Board board = boardService.findBoard(boardId);
model.addAttribute("board", board);
return "board/show";
}
- URL의 쿼리 스트링으로 데이터 전달 → 컨트롤러의 @RequestParam 중 동일 이름의 변수에 바인딩됨
- ex) URL : localhost:8080/board?boardId=1
2-2. @ModelAttribute 예제
- html
<form action="/join" method="post">
아이디: <input type="text" name="id"><br>
이름: <input type="text" name="name"><br>
비밀번호: <input type="password" name="password"><br>
<input type="submit" value="회원가입">
</form>
- Controller
@PostMapping("/join")
public void join(@ModelAttribute JoinDto joinDto) {
User user = new User(joinDto.getId(), joinDto.getName(), joinDto.getPassword());
userService.join(user);
}
// DTO 정의
@Getter @Setter
public class JoinDto {
private String id;
private String name;
private String password;
}
- form 태그의 각 필드 중 name이 DTO의 동일 필드명에 자동으로 바인딩 됨
2-3. @RequestBody 예제
- html, js
<form action="/join" method="post" id="joinForm">
아이디: <input type="text" name="id" required><br>
이름: <input type="text" name="name" required><br>
비밀번호: <input type="password" name="password" required><br>
<input type="submit" value="회원가입">
</form>
<script>
document.getElementById('joinForm').onsubmit = function(event) {
event.preventDefault(); // 기본 제출 방지
const formData = new FormData(this);
const json = {};
formData.forEach((value, key) => {
json[key] = value;
});
fetch('/join', { // '/join' 엔드포인트로 POST 요청
method: 'POST',
headers: {
'Content-Type': 'application/json', // JSON 형식으로 전송
},
body: JSON.stringify(json), // JSON 문자열로 변환
})
};
</script>
- RestController
@RestController
// ... //
@PostMapping("/join")
public String join(@RequestBody JoinDto joinDto) {
User user = new User(joinDto.getId(), joinDto.getName(), joinDto.getPassword());
userService.join(user);
}
// DTO 정의
@Getter @Setter
public class JoinDto {
private String id;
private String name;
private String password;
}
'Spring Boot' 카테고리의 다른 글
[Spring Boot] 스프링 이미지 업로드 예제 (0) - 예시 상황, 공통 코드 (0) | 2024.09.02 |
---|---|
[Spring Boot] MapStruct 라이브러리로 엔티티 ↔ DTO 변환 자동으로 매핑하기 (예제 코드) (0) | 2024.08.14 |
[Spring Boot] 스프링 AOP + 스프링 AOP를 사용한 예외 처리 (@Aspect, @ExceptionHandler, @(Rest)ControllerAdvice) (0) | 2024.08.14 |
[Spring Boot] 스프링 유효성 검사 Validation (@Valid, @Validated, Bean Validation) (0) | 2024.08.13 |
[Thymeleaf] Thymeleaf 기본 문법 (+ 적용 방법) (0) | 2024.08.11 |