[REST API] Spring Boot로 Hello world REST API 생성하기 (@RestController VS @Controller)

민지·2024년 3월 10일
0

REST API - Spring Boot

목록 보기
2/27

1. Spring Boot로 Hello World REST API 생성하기

helloworld 패키지에 HelloWorldController를 만들었다.

1단계에서 배운 핵심부터 말하자면, @RestController는 @Controller와 @ResponseBody가 합쳐진 어노테이션이다!

배울 것 - 코드 주석에 작성

// 1. 이 컨트롤러가 REST API임을 알릴 것 
public class HelloWorldController {

	// 2. REST API에 /hello-world URL 부여

	// 3. 사용자가 /hello-world URL에 들어가면, "hello world" 텍스트를 반환시킬 것.
}

코드 채우기 - @RestController, @RequestMapping, @GetMapping

// 1. 이 컨트롤러가 REST API임을 알릴 것 
@RestController
public class HelloWorldController {

	// 2. REST API에 /hello-world URL 부여

	// 3. 사용자가 /hello-world URL에 들어가면, "hello world" 텍스트를 반환시킬 것.
	@GetMapping(path = "/hello-world")
	public String helloWorld() {
		return "hello world";
	}
}
  • 해당 컨트롤러를 REST API 컨트롤러로 지정하는 @RestController

@Controller와 @RestController 차이

@Controller

  • 언제 쓰는지?
    @Controller 어노테이션은 스프링 MVC에서 컨트롤러를 정의할 때 사용한다.

  • @Controller 메서드의 리턴값
    @Controller가 사용되는 컨트롤러는 HTTP request를 처리하고, 모델 데이터를 뷰에 전달해, 사용자에게 response 페이지를 렌더링하는 역할을 한다.
    따라서 @Controller의 경우, 메서드의 반환타입은 주로 뷰 이름(String)이다!

  • @Controller와 @ResponseBody의 관계
    @Controller는 @ResponseBody 어노테이션을 메서드에 추가해야만, 메서드의 return된 데이터가 HTTP response body에 bind되어, 브라우저에 반환된 문자열이 보여진다.

@RestController

  • 언제 쓰는지?
    @RestController 어노테이션은 spring 4.0부터 도입되었으며, RESTful 웹 서비스를 개발할 때 사용된다.

  • @RestController 메서드의 리턴값
    @RestController를 사용하면, 반환되는 객체를 자동으로 JSON이나 XML과 같은 형식으로 serialize되어, 클라이언트에게 전송된다.
    -> @Controller는 주로 뷰이름인 String이 반환값이지만, @RestController객체(instance)를 반환하면 자동으로 JSON or XML로 바꿔주고, 브라우저에 보여진다.

  • @RestController와 @ResponseBody의 관계
    @RestController는 @Controller@ResponseBody가 합쳐져 있다.
    이에, @RestController만 써도, 컨트롤러 클래스의 모든 메서드의 리턴값을, HTTP response body에 bind시켜, 데이터를 직접 반환하게 한다.

결론적으로, @Controller는 전통적인 웹 어플리케이션 개발에 초점을 맞춘 반면, @RestController는 RESTful 웹 서비스, 즉 데이터를 JSON이나 XML 형태로 클라이언트에게 제공하는 API 개발에 최적화되어 있다.

2. Hello World REST API를 업그레이드하여 Bean을 반환시키기

앞서 @Controller vs @RestController에서도 정리했듯이, 주로 @RestController 메서드의 리턴값은 객체이다. @RestController는 반환되는 객체를 자동으로 JSON이나 XML 형식으로 변환시켜, 클라이언트에게 보여준다고 했었다.

이제, HelloWorldController에서, @RestController의 리턴값이 객체인 코드를 추가해주자.

HelloWorldController modified

@RestController
public class HelloWorldController {

	@GetMapping(path = "/hello-world")
	public String helloWorld() {
		return "hello world";
	}

// 추가된 내용
	@GetMapping(path = "/hello-world-bean")
	public HelloWorldBean helloWorldBean() {
		return new HelloWorldBean("hello world");
	}

}

HelloWorldBean new

public class HelloWorldBean {

	private String message;

	public HelloWorldBean(String message) {
		this.message = message;
	}

	// getters and setters
	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	// toString
	@Override
	public String toString() {
		return "HelloWorldBean [message=" + message + "]";
	}

}

실행결과



참고 및 출처

이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/

profile
배운 내용을 바로바로 기록하자!

0개의 댓글