728x90
반응형
@RestController 는 Spring MVC Controller에 @ResponseBode가 추가된 것.
- RestController의 주용도는 json 형태로 객체 데이터를 반환 하는 것입니다.
- Client 는 uri 형식으로 웹 서비스에 요청을 보낸다.
- Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 보낸다.
- RestController는 해당 요청을 처리하고 데이터를 반환한다.
- @RestControoler가 어노테이션 되어 있다면 백날천날 return 에 jsp 명을 써놔도 view의 call 은 일어나지 않는다.
- 그렇게 때문에 REST 방식은 Ajax와 가장 많이 결합되어 사용한다.
- 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
반응형
'개발중 > Spring' 카테고리의 다른 글
Data → Excel 변환 (0) | 2021.02.15 |
---|---|
이클립스 Vue 프로젝트 만들기 (0) | 2021.01.30 |
web.xml, root-context.xml, servlet.xml 차이점 (0) | 2021.01.05 |
$(document).ready() 와 $(window).load() 차이 (0) | 2021.01.05 |
MyBatis 에서 '#'과 '$'의 차이 (0) | 2021.01.05 |