스프링

[Spring] @RestController , @RequestBody, @ResponseBody

easy-6 2025. 2. 6. 23:43

@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