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