본문으로 바로가기

@RestController 어노테이션

category Programing/JAVA 2023. 6. 1. 23:08
반응형

Spring에서 @RestController는 컨트롤러 클래스에 적용되는 어노테이션으로서, 해당 클래스가 RESTful 웹 서비스의 컨트롤러임을 명시합니다. 이 어노테이션을 사용하면, 해당 클래스의 모든 메소드의 반환 값이 자동으로 HTTP Response Body로 쓰이게 됩니다. 이는 내부적으로 @Controller와 @ResponseBody를 함께 사용하는 것과 같은 효과를 냅니다.

다음은 몇 가지 주요 Controller 어노테이션에 대한 설명입니다:

@Controller: 클래스가 Spring MVC 컨트롤러임을 명시합니다. 해당 컨트롤러의 메소드에서 반환하는 값은 일반적으로 View 이름이 됩니다.

@RestController: @Controller와 @ResponseBody를 합친 것으로, RESTful 웹 서비스를 구현하는 컨트롤러임을 나타냅니다. 해당 컨트롤러의 메소드에서 반환하는 값은 HTTP Response Body에 직접 쓰입니다.

@RequestMapping: 특정 URL을 클래스나 메소드와 매핑합니다. HTTP 메소드 타입(GET, POST 등), URL, 파라미터 등 다양한 조건을 설정할 수 있습니다.

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등: @RequestMapping의 특별한 형태로, 각각 GET, POST, PUT, DELETE HTTP 메소드에 대응됩니다.

@PathVariable: URL 경로에 포함된 변수를 메소드의 파라미터로 사용하게 합니다.

@RequestParam: 쿼리 파라미터나 폼 데이터를 메소드의 파라미터로 사용하게 합니다.

@RequestBody: HTTP 요청의 body를 객체로 변환하여 메소드의 파라미터로 사용하게 합니다.

@ResponseBody: 메소드가 반환하는 값을 HTTP Response Body에 직접 쓰게 합니다.

@ResponseStatus: HTTP Response의 상태 코드를 설정합니다.

이러한 어노테이션들을 적절히 사용하여 HTTP 요청을 처리하고 응답을 구성하는 컨트롤러를 만들 수 있습니다.

아래에서는 주요 Spring 컨트롤러 어노테이션을 예를 들어 설명합니다.


@Controller
public class MyController {
@RequestMapping("/greeting")
public String greeting() {
return "greeting";
}
}
@Controller 어노테이션은 MyController 클래스가 Spring MVC 컨트롤러임을 명시합니다. 이 컨트롤러의 greeting() 메소드는 "/greeting" URL에 매핑되며, 이 메소드의 반환 값인 "greeting"은 View의 이름을 나타냅니다.

@RestController
public class MyRestController {
@RequestMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
@RestController는 RESTful 웹 서비스의 컨트롤러를 나타내며, 위 예시의 hello() 메소드는 "/hello" URL에 매핑되고, 메소드의 반환 값인 "Hello, World!"는 HTTP Response Body로 전송됩니다.


@RestController
public class MyRestController {
@RequestMapping("/mapping") // 모든 HTTP 메소드에 대응
public String mapping() {
return "Mapped by RequestMapping";
}

@GetMapping("/mappingGet") // GET 메소드에 대응
public String mappingGet() {
return "Mapped by GetMapping";
}

@PostMapping("/mappingPost") // POST 메소드에 대응
public String mappingPost() {
return "Mapped by PostMapping";
}
// 이하 PutMapping, DeleteMapping 도 동일한 방식으로 사용됩니다.
}



@RestController
public class MyRestController {
@GetMapping("/users/{userId}")
public String getUser(@PathVariable String userId) {
return "User ID: " + userId;
}

@GetMapping("/search")
public String search(@RequestParam("query") String query) {
return "Search results for: " + query;
}
}


@RestController
public class MyRestController {
@PostMapping("/users")
public String createUser(@RequestBody User user) {
// user 객체를 생성 및 처리하는 코드...
return "Created user: " + user.getName();
}
}


@Controller
public class MyController {
@RequestMapping("/message")
@ResponseBody
public String message() {
return "This is a message";
}
}


@RestController
public class MyRestController {
@GetMapping("/notFound")
@ResponseStatus(HttpStatus.NOT_FOUND)
public String notFound() {
return "Resource not found";
}
}

이렇게 각 어노테이션을 사용하면, Spring MVC에서 HTTP 요청을 처리하고 응답을 송신하는 데 필요한 로직을 쉽게 구현할 수 있습니다.
예를 들어, @RequestBody를 사용하면 HTTP 요청 본문을 Java 객체로 자동 변환할 수 있으므로, 복잡한 데이터 구조를 쉽게 처리할 수 있습니다.

@PathVariable와 @RequestParam을 사용하면 URL 경로나 쿼리 파라미터에서 값을 가져와 메소드의 인자로 전달할 수 있습니다. 이를 통해 동적인 URL 패턴을 사용하거나 사용자 입력에 따라 동작을 변경하는 등의 기능을 쉽게 구현할 수 있습니다.

이와 같이 Spring MVC의 어노테이션들은 웹 애플리케이션의 다양한 요구 사항을 유연하게 처리하는 데 도움을 줍니다. 이러한 기능들을 적절히 활용하여 사용자 요청을 정확하게 이해하고 적절한 응답을 제공하는 컨트롤러를 작성할 수 있습니다.

RestController 에서
"해당 클래스의 모든 메소드의 반환 값이 자동으로 HTTP Response Body로 쓰이게 됩니다"라는 문장은 @RestController 어노테이션을 사용하면 해당 어노테이션이 붙은 컨트롤러 클래스의 모든 메소드가 반환하는 값이 HTTP 응답의 본문인 'Response Body'에 자동으로 포함되어 클라이언트에게 전달된다는 뜻입니다.

HTTP 메시지는 크게 '헤더'와 '바디'로 구성됩니다. '헤더'는 메시지의 메타데이터를 담고 있고, '바디'는 실제로 전달할 데이터를 담고 있습니다.

예를 들어, 아래와 같은 컨트롤러가 있다고 가정해봅시다

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

이 컨트롤러의 hello() 메소드는 "/hello" URL로 요청이 들어오면 "Hello, World!"라는 문자열을 반환합니다. 여기서 @RestController 어노테이션이 붙어 있으므로, 이 메소드가 반환하는 "Hello, World!" 문자열이 HTTP 응답 메시지의 바디 부분에 포함되어 클라이언트에게 전달됩니다. 클라이언트는 이 응답을 받아 "Hello, World!"라는 메시지를 볼 수 있게 됩니다.

Random Photo

반응형