
@Controller = 웹 페이지 반환용 컨트롤러.@RestController = 데이터(JSON/XML) 반환용 컨트롤러 (@Controller + @ResponseBody).import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class PageController {
@GetMapping("/welcome")
public String welcomePage(Model model) {
model.addAttribute("message", "안녕하세요, Spring Boot!");
return "welcome"; // templates/welcome.html 뷰를 반환
}
}
/welcome 요청이 들어오면 welcome.html 뷰를 렌더링하고, 모델에 담긴 데이터를 뷰에 전달함@Controller와 @ResponseBody를 합쳐 놓은 어노테이션이다.import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController {
@GetMapping("/api/greeting")
public Greeting greeting() {
return new Greeting("안녕하세요, Spring Boot!");
}
}
class Greeting {
private String message;
public Greeting(String message) {
this.message = message;
}
// Getter and Setter
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
/api/greeting 요청에 대해 Greeting 객체가 JSON 형식으로 변환되어 응답 본문에 포함됨| 특징 | @Controller | @RestController |
|---|---|---|
| 응답 방식 | 뷰(View) 이름을 반환하여 UI를 렌더링 | 객체를 반환하여 JSON/XML 형태로 응답 본문에 작성 |
| 주요 용도 | 웹 페이지 렌더링 (HTML, JSP 등) | RESTful API 개발 (데이터 통신) |
| 필요한 추가 어노테이션 | JSON 등을 반환하려면 메서드에 @ResponseBody 필요 | @ResponseBody가 포함되어 있어 추가 어노테이션 불필요 |
| 예시 | 템플릿 엔진과 함께 사용하는 웹 애플리케이션 | 모바일 앱이나 프론트엔드와 통신하는 백엔드 API 서버 |
@Controller를 사용@RestController를 사용해야한다.5.1 @Controller로 JSON 데이터 반환하기
@Controller를 사용하면서 JSON 데이터를 반환하려면 메서드에 @ResponseBody 어노테이션을 추가하면 된다.
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ApiController {
@GetMapping("/api/data")
@ResponseBody
public Data getData() {
return new Data("데이터입니다.");
}
}
class Data {
private String content;
public Data(String content) {
this.content = content;
}
// Getter and Setter
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
@ResponseBody를 통해 메서드의 반환값이 뷰가 아닌 응답 본문에 직접 작성됨.@RestController를 사용하는 것이 더 간결하다5.2 @RestController로 뷰 반환하려는 경우
@RestController는 뷰 이름을 반환하더라도 뷰 리졸버가 동작하지 않는다고 한다. 따라서 뷰를 렌더링하려면 @Controller를 사용해야 한다.
@Controller를 사용.@RestController를 사용