1. @RequestParam
- URL 쿼리 파라미터나 HTML Form의 데이터를 매핑할 때 사용한다. 주로 HTTP 통신 Method 중 GET 방식의 통신을 할 때 사용.
- 상황
- 간단한 파라미터를 받을 때
- Ex. 검색 키워드나 페이징 번호
- 예시
"요청 URL : /search?keyword=spring&page=1"
@GetMapping("/search")
public String search(@RequestParam String keyword, @RequestParam int page) {
return "Searching for: " + keyword + ", Page: " + page;
}
2. @ModelAttribute
- HTML Form 데이터나 URL 쿼리 파라미터를 객체로 바인딩
- 상황
- 여러 필드를 가진 객체를 받아야 할 때
- Ex. 회원가입 양식 데이터를 한 번에 객체로 전달
- 예시
"요청 데이터 : name=John&email=john@example.com"
@PostMapping("/register")
public String register(@ModelAttribute USer user) {
return "Registered user: " + user.getName();
}
@RequestParam, @ModelAttribute는 GET + Query Parameter와 Post HTML Form Data를 바인딩하는 법이다
3. @RequestBody
- HTTP 요청 본문(body)에 담긴 데이터를 Java객체로 변환
- Object를 Mapping 할 수 있다.
- HTTP Request Body(JSON Data) -> Converter(Jackson) -> Object
Request Header -> Content - Type : application/json(전달할 데이터 형식) - 상황
- 클라이언트가 JSON이나 XML로 데이터를 보낼 때
- Ex. REST API에서 데이터를 받을 때.
- 예시
"Json
{
"name": "John",
"email": "john@example.com"
}"
@PostMapping("/api/user")
public ResponseEntity<User> saveUser(@RequestBody User user) {
User userName = user.getName();
return ResponseEntity<>(userName, HttpStatus.OK);
}
그럼 약간 궁금할 수도 있다. @RequestBody에서 JSON 데이터를 어떻게 JAVA 객체로 변환 시키는걸까??
그럼 동작 순서를 파해쳐보자!
1. 클라이언트 요청
클라이언트가 HTTP 요청 본문에 JSON 데이터를 담아 서버로 전송.
"JSON"
{
"name": "박병천",
"age": 25
}
2. 컨트롤러에서 @RequestBody로 받기
- @RequestBody 역할 : 요청 본문을 Java 객체로 변환
@PostMapping("/user")
public ResponseEntity<String> createUser(@RequestBody User user) {
String username = user.getName();
return ResponseEntity<>("User name: " + username, HttpStatus.OK);
}
1 ~ 2로 변환될 때 내부 동작 과정
- Spring의 DispatcherServlet
- HTTP 요청을 컨트롤러로 전달.
- 요청 본문(JSON)을 읽고 변환해야 하는 파라미터를 찾는다.(클라이언트가 보낸 JSON 데이터를 받는 변수 위 코드에서는 user)이다.
- HandlerMethodArgumentResolver
- 컨트롤러 메서드의 파라미터를 확인하고(쉽게 POST /user 요청에 매핑된 메서드를 찾는다 라고 생각), @RequestBody 애노테이션이 있는지 탐지.
- 변환이 필요하다고 판단
- HttpMessageConverter
- 요청 본문(JSON)을 Java 객체로 변환하는 역할.
- MappingJackson2HttpMessageConverter 실행:
1. JSON 데이터를 읽음.
2. Jackson ObjectMapper를 사용하여 Java 객체 생성.
- Jackson 라이브러리의 ObjectMapper
- JSON 문자열을 Java 객체로 매핑.
- Java 클래스의 필드와 JSON 키를 매핑하며, 이름이 동일해야 함.
3. Jackson의 역할
Jackson ObjectMapper의 기본 동작:
- JSON 키와 Java 객체의 필드 이름 매핑.
- JSON 값의 타입을 필드 타입에 맞게 변환.
- Getter/Setter 메서드를 사용해 값을 주입.
@RequestBody 동작 방식 요약
- 클라이언트가 JSON 데이터를 보냄
- @RequestBody와 Spring의HttpMessageConverter가 요청 본문을 읽음.
- Jackson ObjectMapper가 JSON을 Java 객체로 변환.
- 컨트롤러 메서드에서 Java 객체를 사용.
'Back-End > Spring-MVC' 카테고리의 다른 글
| HTTP 요청 / 응답 조합 상황별 사용 (0) | 2024.12.02 |
|---|---|
| HTTP 응답 데이터 (1) | 2024.12.02 |
| @RequestMapping (0) | 2024.12.01 |
| @Controller 와 @RestController 요약 정리 (0) | 2024.12.01 |
| Spring MVC 구조 흐름 (0) | 2024.11.30 |