@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 |
댓글