Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

To Dare Is To Do!

직접 만들고 뜯어본 Controller 본문

Spring

직접 만들고 뜯어본 Controller

Nick_Choi 2023. 11. 3. 08:52

 

다음과 같은 화면을 보기 위한 Controller를 구현하는 과정에서 어떠한 어노테이션이 사용되는지 확인해 보고자 한다.

 

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

    @RequestMapping(value="/test", method= RequestMethod.GET)
//  @GetMapping("/test")
  @ResponseBody
    public String hello(){
        return "TEST";
    }
}

 

@Controller

Spring에서 Controller를 지정해 주기 위한 어노테이션이다. 비슷한 어노테이션으로 @RestController이 있는데 Response Body의 생성 유무에서 @Controller와 차이점을 가진다. 

 

전통적인 Spring MVC의 관점에서 Controller는 클라이언트로부터 요청이 날라오면 Service에게 요청을 전달하여 일을 시키고 이를 Service가 처리해서 반환하면 이를 View 화면으로 전달하는 역할을 한다. 이때의 Controller를 지정해 주는 어노테이션이 @Controller이다.

 하지만 위의 예시에는 View 화면이 없기 때문에 @ResponseBody를 통해 json의 형태로 데이터 (TEST)를 반환해야 한다.

 

@ResponseBody

자바 객체를 json 기반의 HTTP Body 내용으로 클라이언트에게 보내준다. (서버 -> 클라이언트)

 

@RestController

@Controller + @ResponseBody = @RestController

ViewName을 반환하는 @Controller와는 다르게 json 형태의 객체 데이터를 주로 반환하는 어노테이션이다.

이는 REST API를 개발할 때 주로 사용된다.

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
//@Controller
public class TestController {

    @RequestMapping(value="/test", method= RequestMethod.GET)
//  @GetMapping("/test")
//  @ResponseBody
    public String hello(){
        return "TEST";
    }
}

 

@RequestMapping

특정 url로 들어온 요청을 특정 메소드와 매핑하기 위해 사용하는 어노테이션이다.

@RequestMapping에서 사용 빈도가 가장 높은 것들은 valuemethodvalue는 요청받을 url을 설정하고 method는 어떠한 요청으로 받을지를 정의한다.

@RequestMapping(value="/test", method= RequestMethod.GET)

 

@GetMapping

하지만 위와 같은 @RequestMapping보다 읽기 쉽고 간결한 형태에 대한 수요가 존재했고 이 때문에 탄생한 것이 @GetMapping과 같은 형태이다. method + Mapping의 모습을 띄고 있으며 뒤에 추가적으로 url을 작성하면 @RequestMapping과 같은 역할을 수행할 수 있다.

@GetMapping("/test")

 

Handler

Controller 안에서 어떠한 요청을 처리하는 메소드를 의미한다.

public String hello(){
        return "TEST";
    }

 

 

 

 

 

 

 

 


참고

https://velog.io/@dyunge_100/Spring-Controller%EC%99%80-RestController%EC%9D%98-%EC%B0%A8%EC%9D%B4

'Spring' 카테고리의 다른 글

HTTP Method  (1) 2023.11.06
Spring 3계층 속 DI  (0) 2023.11.05
스프링의 꽃, 3계층  (0) 2023.10.31
DI와 IoC  (0) 2023.10.31
오버라이딩을 구현할 때 @Override 어노테이션은 반드시 필요할까?  (0) 2023.10.24