@RequestBody, @RequestParam, @ModelAttribute의 차이

Kddongkyu·2023년 10월 22일
0

SpringBoot

목록 보기
1/2
post-thumbnail

@ModelAttribute
@RequestParam
@RequestBody


다음 세가지의 애노테이션(annotation)들은 스프링 프레임워크에서 클라이언트로부터 전송된 데이터를 컨트롤러의 메서드 파라미터(객체, DTO)로 바인딩하는 역할을 한다.


@RequestParam

HTTP 요청 파라미터를 전달받아 메서드의 파라미터로 바인딩한다.

  • URL 쿼리 파라미터나 FORM 데이터의 개별 값을 메서드의 파라미터로 전달합니다.

  • 선택적으로 defaultValue를 지정하여 파라미터가 없을 경우의 기본값을 설정할 수 있습니다.

🔍 예시

<form action="/submit" method="post">
    <input type="text" name="name" />
    <input type="text" name="age" />
    <input type="submit" value="Submit" />
</form>
@PostMapping("/submit")
public String handleSubmit(@RequestParam String name, @RequestParam int age) {
    // 여기서 'name'과 'age' 파라미터는 Form에서 전송된 데이터를 받아옵니다.
    // 로직 처리...
    return "response";
}

// GET http://yourdomain.com/greeting?name=John
// => return value : "Hello, John!"
// GET http://yourdomain.com/greeting
// => return value : "Hello, World!"
@GetMapping("/greeting")
@ResponseBody
public String greeting(@RequestParam(name="name", defaultValue="World") String name) {
    return "Hello, " + name + "!";
}

@RequestBody

HTTP 요청의 Body 부분을 메서드의 파라미터로 바인딩한다.

  • 주로 JSON, XML과 같은 메시지 바디를 Java 객체로 변환하여 바인딩하는 데 사용됩니다.

🔍 예시

// request
POST /requestBody HTTP/1.1
Content-Type: application/json
{
    "title": "My Title",
    "content": "This is content"
}

@PostMapping("/requestBody")
public ResponseEntity<Board> requestBody(@RequestBody Board board) {
    // @RequestBody는 MessageConverter를 통해 Json 형태의 HTTP Body를 Java 객체로 변환시킨다.
    return ResponseEntity.ok(board);
}

@ModelAttribute

Form 데이터나 URL 파라미터를 객체로 바인딩합니다.

  • 클라이언트에서 전송된 키-값 쌍의 데이터를 지정된 타입의 객체로 바인딩하고, 이 객체를 Model에 추가합니다.

  • 주로 Form에서 전송된 데이터를 도메인 객체에 바인딩하는 데 사용됩니다.

  • 컨트롤러의 메서드 파라미터 앞에 사용하거나, 메서드 레벨에서 사용할 수 있습니다.

🔍 예시

POST /modelAttribute HTTP/1.1
Content-Type: application/x-www-form-urlencoded
title=My+Title&content=This+is+content

@PostMapping("/modelAttribute")
public ResponseEntity<Board> modelAttribute(@ModelAttribute Board board) {
    // @ModelAttribute는 폼(form) 형태의 HTTP Body와 요청 파라미터들을 객체에 바인딩시킨다.
    return ResponseEntity.ok(board);
}

🔑 결론

@RequestParam : URL의 쿼리 파라미터나 Form 데이터의 개별 값을 메서드의 파라미터로 바인딩합니다.
@ModelAttribute : Form 데이터나 URL 파라미터를 객체로 바인딩하며, 선택적으로 Model에 추가하여 View에서 사용할 수 있게 합니다.
@RequestBody : HTTP 요청 본문(주로 JSON이나 XML 데이터)을 Java 객체로 역직렬화하여 메서드의 파라미터로 바인딩합니다.

profile
Step by step

0개의 댓글