본문 바로가기
공부/기타궁금

스프링 부트 에서 @modelAttribute 와 @requestBody 의 차이점과 쓰임새는?

by 띵커베르 2023. 3. 9.
728x90

@ModelAttribute와 @RequestBody는 모두 Spring MVC에서 사용되는 어노테이션으로, HTTP 요청에서 전송된 데이터를 컨트롤러 메서드에서 사용할 수 있게 하는 역할을 하지만 사용되는 방식과 동작은 다르다.

 

@ModelAttribute는 HTTP 요청 파라미터를 해당 컨트롤러의 메서드 매개변수에 바인딩한다.

즉, HTTP 요청 파라미터와 메서드 매개변수의 이름이 일치하면 자동으로 값을 매핑합니다. 또한, @ModelAttribute는 해당 메서드가 실행되기 전에 먼저 실행되어 모델에 데이터를 바인딩합니다.

이렇게 바인딩된 모델은 View에서 사용될 수 있습니다.

 

예를 들어

@GetMapping("/person")
public String getPerson(@ModelAttribute("person") Person person) {
    // person 객체를 사용하여 작업 수행
    return "person-view";
}

위 코드에서 @ModelAttribute("person")은 HTTP 요청 파라미터에서 "person" 이름으로 전달된 값을 Person 객체에 바인딩하고, person이라는 이름으로 모델에 저장한다.

 

===

 

@RequestBody는 HTTP 요청의 본문(body)에 전송된 데이터를 읽어와서 해당 메서드의 매개변수에 바인딩한다.

즉, JSON 형식으로 전송된 데이터를 자바 객체로 매핑할 수 있다.

 

예를 들어

@PostMapping("/person")
public void createPerson(@RequestBody Person person) {
    // person 객체를 사용하여 작업 수행
}

위 코드에서 @RequestBody는 HTTP POST 요청의 본문(body)에 전송된 JSON 형식의 데이터를 Person 객체로 변환하여 매개변수에 바인딩한다.

 

결론은

@ModelAttribute는 HTTP 요청 파라미터를 바인딩하고

@RequestBody는 HTTP 요청 본문을 바인딩한다. 

  • @ModelAttribute는 HTML Form 데이터를 컨트롤러 메서드에 전달할 때 사용된다.
  • @RequestBody는 RESTful API에서 JSON 형식으로 전송된 데이터를 컨트롤러 메서드에서 사용할 때 사용된다.
728x90

댓글