본문 바로가기
IT개발/Spring5

[Spring5]@RestController, @JsonIgnore, @RequestBody 정의 및 예시

by Thompson 2024. 11. 25.
728x90

1. @RestController

정의

  • @RestController는 Spring Framework에서 컨트롤러 클래스를 정의할 때 사용하는 어노테이션입니다.
  • HTTP 요청(GET, POST 등)에 대한 응답을 처리하고, 그 결과를 JSON 형식으로 반환합니다.

특징

  • @Controller + @ResponseBody의 결합된 역할을 합니다.
    • @Controller: 요청 처리 메서드를 정의.
    • @ResponseBody: 메서드의 반환값을 JSON 또는 XML과 같은 HTTP 응답 본문으로 변환.

사용 예제

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}

 

브라우저에서 /hello로 요청하면, 응답으로 Hello, World!라는 텍스트가 JSON 형식으로 반환됩니다.

2. @JsonIgnore

정의

  • @JsonIgnore는 Jackson 라이브러리에서 사용되며, 객체를 JSON으로 변환할 때 특정 필드(변수)를 제외하기 위해 사용됩니다.
  • 민감한 데이터나 필요 없는 데이터를 클라이언트에 노출하지 않도록 할 때 활용합니다.

특징

  • 객체를 직렬화(serialize)할 때 해당 필드는 무시됨.
  • 비밀번호, 개인 정보와 같이 외부에 노출되면 안 되는 데이터를 숨길 때 주로 사용.

사용 예제

import com.fasterxml.jackson.annotation.JsonIgnore;

public class User {

    private String name;

    @JsonIgnore
    private String password;

    // Getter, Setter
}

 

객체를 JSON으로 변환 시 password 필드는 JSON에 포함되지 않습니다.

User user = new User();
user.setName("Alice");
user.setPassword("1234");

String json = objectMapper.writeValueAsString(user);
System.out.println(json); // {"name":"Alice"}

3. @RequestBody

정의

  • @RequestBody는 HTTP 요청의 본문(body)에 담긴 데이터를 Java 객체로 변환하기 위해 사용됩니다.
  • 클라이언트가 전송한 JSON 데이터를 자바 객체로 매핑합니다.

특징

  • 클라이언트가 보낸 데이터는 보통 JSON 형식으로 전송됩니다.
  • Spring이 자동으로 Jackson 라이브러리를 사용하여 JSON 데이터를 Java 객체로 변환합니다.

사용 예제

java
코드 복사
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @PostMapping("/user")
    public String createUser(@RequestBody User user) {
        return "User created: " + user.getName();
    }
}

class User {
    private String name;
    private String email;

    // Getter, Setter
}

 

클라이언트가 다음과 같은 요청을 보낸다 했을 때.

 { 
 	"name": "Alice",
    "email": "alice@example.com" 
 }

 

서버는 이 JSON 데이터를 User 객체로 변환하여 처리합니다

  • user.getName() → "Alice"
  • user.getEmail() → "alice@example.com"

요약 비교

@RestController HTTP 요청을 처리하고 응답을 JSON 형식으로 반환. 컨트롤러 클래스에 사용.
@JsonIgnore JSON 직렬화 시 특정 필드를 제외. 데이터 보안 및 불필요한 데이터 제거에 사용.
@RequestBody 클라이언트 요청의 본문 데이터를 Java 객체로 변환. JSON 데이터를 객체로 매핑하는 데 사용.