@RequestBody의 의미
@RequestBody는 클라이언트에서 요청 본문(Body)에 포함된 JSON 또는 XML 데이터를 서버 측 객체로 변환하는 데 사용됩니다.
요약하자면, 클라이언트가 서버에게 요청할 때 보내는 데이터라고 볼 수 있음.
역할
- HTTP 요청 본문(JSON, XML 등) 데이터를 자바 객체로 매핑함.
- Spring의 HttpMessageConverter가 내부적으로 요청 데이터를 자바 객체로 변환함.
사용 이유
- RESTful API에서 주로 POST, PUT 요청 시 JSON 데이터를 서버로 전달하는 경우 사용함.
- 컨트롤러 메서드가 클라이언트로부터 요청 데이터를 보다 직접적으로 받을 수 있음.
@RequestBody 사용
- 클라이언트가 JSON 형식으로 보낸 ajax의 내부 데이터를 CheckInCheckOutVO 객체에 매핑함.
해당 코드는 클라이언트가 서버로 JSON 타입의 내부 데이터를 보낼 때, 서버에서 @RequestBody로 매핑한다는 것을 알 수 있음 .
// controller
public ResponseEntity<String> checkIn(@RequestBody CheckInCheckOutVO checkInCheckOutVO)
// 클라이언트가 ajax로 보내는 JSON타입의 내부 데이터
{ "latitude": "37.5665", "longitude": "126.9780" }
@RequestBody
클라이언트가 전송한 JSON이나 XML 형식의 데이터를 지정한 자바 객체(예: CheckInCheckOutVO)로 변환하여 컨트롤러 메서드의 파라미터에 주입하여, 요청 데이터를 보다 쉽게 처리할 수 있음. 위의 코드에서는 checkInCheckOutVO.getLatitude()를 통해서 확인 할 수 있음
@ResponseBody
역할:
- 컨트롤러 메서드가 리턴하는 Java 객체를 HTTP 응답의 body로 변환하여 클라이언트에 전송함.
- 내부적으로도 HttpMessageConverter가 동작하여 Java 객체를 JSON, XML 등의 형식으로 직렬화(serialization)함.
@RestController가 아닌 @ResponseBody를 사용했을 때
@GetMapping("/users/{id}")
public @ResponseBody User getUser(@PathVariable Long id) {
// 데이터베이스나 서비스에서 id에 해당하는 사용자 정보를 조회하여 반환
// service(인터페이스)-serviceImpl(구현 클래스)-DAO-mapper 순으로 조회 후 반환함
User user = userService.findById(id);
return user; // 만약 찾았다면, 매개변수에 해당하는 유저의 정보를 넘겨줌
}
@RestController 를 사용했을 때
@RestController // 모든 메서드에 @ResponseBody 적용
@RequestMapping("/api") // 해당 컨트롤러의 경로를 /api로 지정, 즉 Usercontroller 내부 메소드는 다 /api로 시작함
public class UserController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
}
클래스 전체에 @RestController 어노테이션을 붙이면, 모든 메서드에 자동으로 @ResponseBody가 적용되어 리턴 객체가 JSON으로 변환됨.
3. 요약
- @RequestBody:
클라이언트가 보낸 HTTP 요청의 body에 담긴 JSON(또는 XML) 데이터를 자동으로 Java 객체로 변환. - @ResponseBody:
컨트롤러 메서드가 반환하는 Java 객체를 HTTP 응답의 body에 담아 클라이언트에게 전달.
@RestController
역할:
- 컨트롤러 클래스에 붙여서 해당 클래스의 모든 메서드가 리턴하는 객체를 HTTP 응답 본문에 자동으로 직렬화(주로 JSON)함.
- 내부적으로 모든 메서드에 @ResponseBody가 적용된 것과 동일하게 동작하기 때문에 Restcontroller을 선언한다면, @ResponseBody를 선언할 필요가 없음.
- 용도:
- 주로 RESTful API를 구현할 때 사용하며, 별도의 뷰(view)를 반환하지 않고 데이터를 바로 클라이언트로 전송할 때 사용함.
@RestController // 모든 메서드에 @ResponseBody 적용
@RequestMapping("/api") // 해당 컨트롤러의 경로를 /api로 지정, 즉 Usercontroller 내부 메소드는 다 /api로 시작함
public class UserController {
// 단순히 객체를 반환하면,
//Spring이 이를 JSON으로 직렬화하여 HTTP 응답 본문에 담아 클라이언트에게 보냄
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
}
- 위 코드에서 User 객체는 자동으로 JSON으로 변환되어 HTTP 응답 본문(body)에 담김.
- 별도로 HTTP 상태 코드나 헤더를 제어하지 않으면, 기본적으로 200 OK 상태로 반환됨.
'스프링' 카테고리의 다른 글
| EL & JSTL (0) | 2025.02.12 |
|---|---|
| [Spring] Spring MVC 프로젝트 생성 시 발생하는 오류 (0) | 2025.02.12 |
| [Spring] ResponseEntity (0) | 2025.02.06 |
| [Spring] Spring 세팅 오류 (0) | 2025.01.23 |
| [Spring] tomcat 연결 후 브라우저 설정 (0) | 2025.01.20 |