728x90
✅ 1. @Controller
📌 View(HTML)를 반환하는 컨트롤러
📌 주로 Thymeleaf, JSP 같은 템플릿 엔진과 함께 사용
📌 메서드의 반환값이 View 이름이 됨
📌 @ResponseBody 없이 문자열을 반환하면 템플릿을 찾아감
🔹 예제 (@Controller)
@Controller
public class PageController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("msg", "Hello, Thymeleaf!");
return "hello"; // View 이름 (hello.html) 반환
}
}
🔹 URL 요청: http://localhost:8080/hello
🔹 결과: hello.html 페이지가 렌더링됨
✅ 2. @RestController
📌 JSON이나 문자열 데이터를 반환하는 컨트롤러
📌 @ResponseBody가 자동 적용됨
📌 RESTful API 개발에 적합 (React, Vue, Android 등 프론트엔드와 연동할 때 사용)
🔹 예제 (@RestController)
@RestController
public class ApiController {
@GetMapping("/api/hello")
public String hello() {
return "Hello, World!"; // 문자열 그대로 반환
}
@GetMapping("/api/data")
public Map<String, Object> getData() {
Map<String, Object> response = new HashMap<>();
response.put("message", "Hello, JSON!");
response.put("status", 200);
return response; // JSON 반환
}
}
🔹 URL 요청:
- http://localhost:8080/api/hello → "Hello, World!" (문자열)
- http://localhost:8080/api/data → {"message": "Hello, JSON!", "status": 200} (JSON 응답)
🎯 차이점 요약
@Controller@RestController
주 사용 목적 | HTML View 반환 | JSON, 문자열 반환 (API) |
View 템플릿 사용 | O (Thymeleaf, JSP 등) | X |
@ResponseBody 필요 여부 | 필요 (@ResponseBody 추가해야 JSON 반환 가능) | 불필요 (@ResponseBody 자동 적용) |
사용 예시 | 웹 페이지, UI 렌더링 | REST API 개발 (React, Vue, 모바일앱 등과 연동) |
🚀 언제 사용해야 할까?
✔ 웹 페이지(View 렌더링) 필요하면? → @Controller
✔ API 개발(JSON 데이터 반환)하면? → @RestController
만약 @Controller에서 JSON을 반환하고 싶으면?
@ResponseBody를 추가하면 돼!
@Controller
public class TestController {
@GetMapping("/json")
@ResponseBody
public String json() {
return "{\"message\":\"Hello JSON!\"}";
}
}
728x90
'프로그래밍 > Spring' 카테고리의 다른 글
REST API란? (0) | 2025.04.04 |
---|---|
http응답 상태 코드 참조 사이트 (0) | 2025.04.03 |
Thymeleaf란? (0) | 2025.04.01 |
Spring View란? +DTO,VO (0) | 2025.03.31 |
Spring Controller란? (0) | 2025.03.28 |