본문 바로가기
Spring

[Spring] 3 Layer - Controller

by worldcenter 2024. 9. 26.

 

Controller는 Model 과 View 사이에서 상호작용을 조정하고 제어하는 역할을 합니다. 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트 합니다.

보통 하나의 Controller에 모든 API를 넣지 않고 유사한 성격의 API를 하나의 Controller로 관리합니다.

 

 

@Controller

@Controller는 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록해줄 수 있습니다.

@ResponseBody 

@Controller
public class HelloController {
    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "hello world!!";
    }

 

보통 메서드의 반환 값을 HTTP 응답 본문(View)에 직접 작성하도록 지시합니다. hello() 메서드가 반환하는 문자열 "hello world!!"가 HTTP 응답으로 클라이언트에 전송됩니다. @ResponseBody를 사용하면, 반환되는 데이터가 뷰 이름이 아닌 실제 데이터로 해석되어, JSON, XML 등의 형태로도 응답할 수 있습니다.

 

@GetMapping @PostMapping @ PutMapping @ DeleteMapping

@Controller
public class HelloController {
    @GetMapping("/api/hello")
    @ResponseBody
    public String hello() {
        return "hello world!!";
    }

    @GetMapping("/api/get")
    @ResponseBody
    public String get() {
        return "Get Method 요청";
    }

    @PostMapping("/api/post")
    @ResponseBody
    public String post() {
        return "Post Method 요청";
    }

    @PutMapping("/api/put")
    @ResponseBody
    public String put() {
        return "PUT Method 요청";
    }

    @DeleteMapping("/api/delete")
    @ResponseBody
    public String delete() {
        return "DELETE Method 요청";
    }
}

 

 

@ RequestMapping

@RequestMapping은 중복되는 URL을 단축시켜줄 수 있습니다. 아래 코드를 예시로 보면 /api로 시작하는 요청이 들어오는 경우 HelloController 클래스로 이동하라는 의미 입니다.

@Controller
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "hello world!!";
    }

    @GetMapping("/get")
    @ResponseBody
    public String get() {
        return "Get Method 요청";
    }

    @PostMapping("/post")
    @ResponseBody
    public String post() {
        return "Post Method 요청";
    }

    @PutMapping("/put")
    @ResponseBody
    public String put() {
        return "PUT Method 요청";
    }

    @DeleteMapping("/delete")
    @ResponseBody
    public String delete() {
        return "DELETE Method 요청";
    }
}