Spring/스프링 이론

@ModelAttribute, @RequestBody의 차이점

블로그 주인장 2024. 2. 4.

@ModelAttribute와 @RequestBody 어노테이션은 Spring MVC 프레임워크에서 사용됩니다.

HTTP 요청의 데이터를 컨트롤러 메서드에서 처리하기 위해서 사용됩니다.

위의 예시 코드를 활용해서 2개의 어노테이션의 사용 방법과 동작에 대해 알아보겠습니다.

 

코드 분석

 

@RequestBody

RequestBody는 HTTP 요청의 본문(body)에 담긴 데이터를 객체로 바인딩하기 위해 사용됩니다.

컨트롤러 메서드의 파라미터 앞에 @RequestBody를 사용하여 해당 파라미터의 요청 본문의

데이터를 변환하여 객체로 받아올 수 있습니다.

주로 JSON, XML 등의 데이터 형식의 요청을 처리할 때 사용됩니다.

 

@PostMapping("/test")
public ResponseEntity<RequestBodyDto> testRequestBody(@RequestBody RequestBodyDto requestBodyDto) {
    return ResponseEntity.ok(requestBodyDto);
}

위의 코드는 RequestBody를 사용한 컨트롤러의 예시입니다.

 

 

 

위의 이미지 처럼 @RequestBody를 사용했기 때문에

Body에 해당 Dto에 있는 값을 Json 형태로 반환해서 요청을 하게 됩니다.

 

 

@ModelAttribute

ModelAttribute는 HTTP 요청의 파라미터를 객체로 바인딩하기 위해 사용됩니다.

컨트롤러 메서드의 파라미터 앞에 @ModelAttribute를 사용하여 해당 파라미터를 객체로 변환하고,

이를 컨트롤러 메서드 내에서 사용할 수 있습니다.

 

또한, 해당 어노테이션을 사용하면 해당 객체를 자동으로 View에 전달합니다.

이를 통해 주로 HTML form Data를 처리할 때 사용됩니다.

@GetMapping("/test")
public ResponseEntity<?> testModelAttribute(@ModelAttribute ModelAttributeDto modelAttributeDto) {
   return ResponseEntity.ok(modelAttributeDto);
}

위의 코드는 ModelAttribute 를 사용한 컨트롤러의 예시입니다.

 

 

@ModelAttribute는 api/url/name=req&age=1과 같은 Query String 형태

혹은 요청 본문에 삽입되는 Form 형태의 데이터를 처리하게 됩니다.

 

그렇기 때문에 Body에 JSON 형식으로 POST 요청을 보내도 데이터를 받지 못하게 됩니다.

또, contentType을 x-www-form-url-encoded 형식으로, 요청 본문 내용을 Form 형식으로 보내야합니다.

 

 

마무리

@RequestBody는 요청 본문에 Body 형태로 JSON or XML 형태로 데이터 요청 시에 사용이 가능합니다.

@ModelAttribute는 Query String(x-www-form-url-encoded) 형태로 form 데이터 형식으로 받기 때문에

그 외의 조건의 경우 null로 반환하게 됩니다.

반응형

'Spring > 스프링 이론' 카테고리의 다른 글

Pageable을 처리하는 여러 방법  (0) 2024.01.25
Message Broker STOMP 개념  (1) 2024.01.24
Http Interface 사용하기  (0) 2024.01.08

댓글