본문 바로가기
JAVA

[Spring-Framework - MVC] @ModelAttribute,@RequestParam,@RequestBody의 차이와 예시

by MMXVI 2023. 8. 11.
728x90
반응형
SMALL

 

Spring Framework에서 웹 애플리케이션 개발 시 

매개변수를 전달하는 방법을 지정하는 어노테이션(annotation)입니다.

 

반응형


@RequestBody

 

이 @RequestBody  어노테이션은 HTTP 요청의 본문(body)에 포함된 데이터를 Java 객체로 변환해주는 역할을 합니다. 주로 POST나 PUT과 같은 HTTP 메서드를 통해 전달되는 JSON 또는 XML 형태의 데이터를 객체로 변환할 때 사용됩니다. 이를 통해 컨트롤러에서 이 데이터를 처리할 수 있게 됩니다.


클라이언트는 JSON 형태의 데이터를 HTTP POST 요청의 본문에 담아 서버에 보냅니다. 

예를 들어, JavaScript로 작성된 클라이언트 코드에서는 다음과 같이 POST 요청을 보낼 수 있습니다:

 

 

<javascript>

const userData = {
    username: "john_doe",
    email: "john@example.com"
};

$.ajax({
    url: "/create",
    method: "POST",
    contentType: "application/json",
    data: JSON.stringify(userData),
    success: function(response) {
        // 서버 응답 처리
    }
});

 

 

 

어노테이션은 HTTP 요청의 본문(body)에 들어 있는 데이터를 지정한 클래스의 객체로 변환해줍니다.

주로 JSON 또는 XML과 같은 형식의 데이터를 자바 객체로 변환하는 데 사용됩니다.

이렇게 변환된 객체는 컨트롤러의 메서드 매개변수로 전달되어 처리됩니다. 예를 들어, 다음과 같은 코드를 보면:

 

<controller>

  @PostMapping("/create")
    public ResponseEntity<?> createUser(@RequestBody User user) {
        // user 객체를 이용하여 새로운 사용자 생성
        // ...

        return ResponseEntity.ok("User created successfully");
    }
}

 

 


@ModelAttribute


이 어노테이션은 HTTP 요청 파라미터를 자바 객체의 프로퍼티로 바인딩해주는 역할을 합니다

주로 HTML 폼(form)을 통해 전송되는 데이터를 객체로 매핑할 때 사용됩니다. Spring MVC에서 사용되며, 컨트롤러 메서드의 매개변수 앞에 붙여서 사용합니다.

 

HTML 폼 사용:

HTML 폼을 사용하여 데이터를 전송하는 경우, 클라이언트 측에서 HTML 폼을 작성하고 서버에서 컨트롤러를 통해 데이터를 받습니다.
<javascript>

<form action="/update" method="post">
    <input type="text" name="name" value="John Doe">
    <input type="email" name="email" value="john@example.com">
    <button type="submit">Update</button>
</form>


서버의 컨트롤러 메서드에서는 다음과 같이 @ModelAttribute를 사용하여 데이터를 받아옵니다.
<controller>

@PostMapping("/update")
public ResponseEntity<?> updateUser(@ModelAttribute UserInfo userInfo) {
    // userInfo 객체를 이용하여 사용자 정보 업데이트
    // ...

    return ResponseEntity.ok("User information updated");
}


AJAX 사용:

AJAX를 사용하여 데이터를 전송하는 경우, 클라이언트 측에서 AJAX 요청을 보내고 서버에서 컨트롤러를 통해 데이터를 받습니다.

const userFormData = {
    name: "John Doe",
    email: "john@example.com"
};

$.ajax({
    url: "/update",
    method: "POST",
    contentType: "application/x-www-form-urlencoded",
    data: userFormData,
    success: function(response) {
        // 서버 응답 처리
    }
});


서버의 컨트롤러 메서드에서는 마찬가지로 @ModelAttribute를 사용하여 데이터를 받아옵니다.

@PostMapping("/update")
public ResponseEntity<?> updateUser(@ModelAttribute UserInfo userInfo) {
    // userInfo 객체를 이용하여 사용자 정보 업데이트
    // ...

    return ResponseEntity.ok("User information updated");
}


두 경우 모두 @ModelAttribute는 클라이언트 측에서 전송한 데이터를 자동으로 해당 객체의 프로퍼티로 매핑하여 컨트롤러 메서드에서 사용할 수 있도록 도와줍니다.

 

728x90



@RequestParam

 

@RequestParam 어노테이션은 URL의 쿼리 파라미터를 메서드의 매개변수로 받아올 때 사용됩니다. 이를 통해 클라이언트가 전달한 요청의 파라미터 값을 서버에서 활용할 수 있습니다. 

 

 

아래는 @RequestParam의 예시입니다.

HTML 폼을 사용한 요청:

클라이언트 측에서 HTML 폼을 사용하여 데이터를 서버로 전송하는 경우, @RequestParam을 사용하여 서버에서 파라미터 값을 받아올 수 있습니다.

<form action="/search" method="get">
    <input type="text" name="query" placeholder="Search query">
    <button type="submit">Search</button>
</form>


서버의 컨트롤러 메서드에서는 @RequestParam을 사용하여 쿼리 파라미터 값을 받아옵니다.


@GetMapping("/search")
public ResponseEntity<?> search(@RequestParam("query") String searchQuery) {
    // searchQuery 값을 이용하여 검색 수행
    // ...

    return ResponseEntity.ok("Search results for: " + searchQuery);
}


AJAX 요청을 통한 요청:



AJAX를 사용하여 데이터를 서버로 전송하는 경우에도 @RequestParam을 사용할 수 있습니다.

javascript

$.ajax({
    url: "/search",
    method: "GET",
    data: { query: searchQuery },
    success: function(response) {
        // 서버 응답 처리
    }
});


서버의 컨트롤러 메서드에서도 마찬가지로 @RequestParam을 사용하여 파라미터 값을 받아옵니다.

@GetMapping("/search")
public ResponseEntity<?> search(@RequestParam("query") String searchQuery) {
    // searchQuery 값을 이용하여 검색 수행
    // ...

    return ResponseEntity.ok("Search results for: " + searchQuery);
}


이런식으로 

@RequestParam 어노테이션은 클라이언트에서 보낸 URL의 쿼리 파라미터 값을 메서드의 매개변수로 간편하게 받아와서 활용할 수 있게 해줍니다.


 

내용 정리 

 

@RequestBody:
사용: HTTP 요청의 본문에 포함된 데이터를 자바 객체로 변환할 때 사용합니다.
주로 사용되는 데이터 형식: JSON, XML 등 컨트롤러 메서드의 매개변수로 사용됩니다.


주로 POST나 PUT 요청과 함께 사용됩니다.
데이터를 객체로 변환하여 컨트롤러에서 처리합니다.



@ModelAttribute:
사용: HTML 폼(form)이나 AJAX를 통해 전송되는 데이터를 자바 객체로 바인딩할 때 사용합니다.
주로 사용되는 데이터 형식: 폼 데이터, AJAX를 통해 전송되는 데이터 컨트롤러 메서드의 매개변수 앞에 붙여 사용됩니다.
HTML 폼 데이터나 AJAX 요청에서 전달된 데이터를 객체로 변환하여 컨트롤러에서 처리합니다.



@RequestParam:
사용: URL의 쿼리 파라미터로 전달되는 데이터를 메서드의 매개변수와 연결할 때 사용합니다.
주로 사용되는 데이터 형식: URL의 쿼리 파라미터 컨트롤러 메서드의 매개변수로 사용됩니다.
주로 GET 요청과 함께 사용됩니다.


URL의 쿼리 파라미터 값을 매개변수로 받아 컨트롤러에서 처리합니다.
요약하자면, 각 어노테이션은 데이터의 전달 방식에 따라 사용됩니다.

 

@RequestBody는 요청 본문에 데이터가 있을 때, @ModelAttribute는 HTML 폼이나 AJAX로 데이터가 전송될 때, @RequestParam은 URL의 쿼리 파라미터로 데이터가 전달될 때 사용됩니다.


이들은 Spring Framework에서 웹 애플리케이션을 개발할 때 데이터 전달을 쉽게 처리하기 위해 사용되며,

각 어노테이션의 특징을 이해하면 어떤 상황에서 어떤 어노테이션을 사용해야 하는지 결정하는 데 도움이 됩니다.




 

728x90
반응형
LIST

댓글