본문 바로가기

개발중/Spring

@RestController 이해하기

728x90
반응형

@RestController 는 Spring MVC Controller에 @ResponseBode가 추가된 것.

  • RestController의 주용도는 json 형태로 객체 데이터를 반환 하는 것입니다.
  1. Client 는 uri 형식으로 웹 서비스에 요청을 보낸다.
  2. Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 보낸다.
  3. RestController는 해당 요청을 처리하고 데이터를 반환한다.
  4. @RestControoler가 어노테이션 되어 있다면 백날천날 return 에 jsp 명을 써놔도 view의 call 은 일어나지 않는다.
  5. 그렇게 때문에 REST 방식은 Ajax와 가장 많이 결합되어 사용한다.
  6. RestController용 java를 따로 만들고 여기서는 데이터를 주고 받는 기능만 하는 경우가 대부분이다.

REST 의 개념

  • Representational State Transfer 의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념.
  • REST 방식은 특정한 URI는 반드시 그에 상응하는 데이터 자체라는 것을 의미하는 방식이다.

@Controller의 실행 흐름

Client -> Request -> Dispatcher Servlet -> Handler Mapping -> 

Controller -> View -> Dispatcher Servlet -> Response -> Client 

 

@ResponseBody의 실행 흐름

Client -> Request -> Dispatcher Servlet -> Handler Mapping ->

 Controller (ResponseBody)-> Response -> Client 

 

@RestController의 실행 흐름

Client -> HTTP Request -> Dispatcher Servlet -> Handler Mapping -> 

RestController (자동 ResponseBody 추가)-> HTTP Response -> Client

 


@RestController EX

@RestController
public class RestControllerEX {

	@GetMapping("/testpage")
    public String root(){
    	return "HELLO";
    }
}

문자열 그 자체가 반환이 된다.

 


@RestController
public class RestControllerEX {

	@GetMapping("/testpage")
    public List<Integer> root(){
    	List<Integer> mlist = new AttayList<Integer>();
        mlist.add(1);
        mlist.add(2);
        mlist.add(3);
        mlist.add(4);
        return mlist;
    }
}

문자열 뿐만 아리라 List도 반환이 가능하다.

 


@Controller EX

@Controller
public class RestControllerEX {

    @RequestMapping("/testpage")
    public String root(){
    	return "HELLO";
    }
}

우리가 알다시피 Controller + RequestMapping 사용할 경우에는 jsp 파일이 call 이 된다.

 

 

@Controller + @RequestMapping+ @ResponseBody

@Controller
public class RestControllerEX {

    @RequestMapping("/testpage")
    @ResponseBody
    public  Map<String, String> root(){
    	Map<String, String> resultMap = new HashMap<String, String>();
    	return resultMap;
    }
}

@ResponseBody 가 사용되면 Method 에서 반환하는 값은 jsp 에서 json 형태로 받아드리게 된다.

728x90
반응형