MVC 패턴의 View와 Model을 이어주는 컴포넌트다. SpringMVC에서는 @Controller Annotation을 붙이고, URL에 따라 @RequestMapping 또는 method Mapping을 사용한다.
@Controller
public class TestApi{
@GetMapping("/msgTest")
public String test(Model model){
model.addAttribute("msg","test");
return "testView";
}
}
class 선언 상단에@ControllerAnnotation을 붙인 후 메소드에 URL Mapping을 작성한다. "/login"으로 요청이 들어오면 test()가 실행되어 결과값을 "testView"로 반환한다.
RestController
@RestController란 @Controller + @ResponseBody 가 합쳐진 Annotation이다. 모든 메소드에 @ResponsBody를 적용하기 때문에 Restful API를 만들기위한 Controller에 주로 사용한다. ※ @ResponseBody : @Controller 내부 메소드에 대한 return을 ViewResolver가 아닌 HTTPbody로 전달하여 String 또는 JSON의 형태로 반환하기 위해 사용한다.
@RestController
public class TestApi{
@GetMapping("/test")
public String test(){
return "testApi";
}
}
classs 선언 상단에@RestControllerAnnotation을 붙인 후 적용할 메소드에 URL Mapping을 작성한다. 클라이언트로부터 "/test"로 요청이 들어오면 View : "testApi"를 반환하는게 아닌 문자열 : "testApi"를 반환한다.
@Controller 테스트
TestController Class는 @Controller Annotation을 적용 했다. @GetMapping("/msgTest") 으로 Get mapping 하여 "/msgTest" 로 요청이 들어올 경우 "msg" 라는 속성명으로 "test"라는 값을 데이터 바인딩 했다. return 되는 view name은 "testView"이다.
테스트를 위해 간단한 template engine인 mustache를 사용하였고, testView.mustache 파일이resource/templates폴더에 있는것을 확인하였다.
testView.mustache내부 코드는 간단한 테스트를 위해 속성명 msg를 통해 데이터바인딩이 정상적으로 되는지를 확인한다.
Mapping한 URL인 msgTest로 진입할 경우{{{msg}}}에 바인딩한 값인 "test"가 정상적으로 나오는것을 확인할 수 있다.
@RestController 테스트
@RestController의 경우 2가지 테스트를 진행했다. 반환형이 String인 메소드와 Object 타입인 메소드로 진행하여 리턴값이 어떻게 나오는지 Postman을 통해 확인했다. ※ Postman : API 구현, 테스트 플랫폼이며, URL로 요청시 String 또는 JSON에 대한 리턴값을 확인할 수 있다. 1. "/stringTest"로 요청시
String의 대한 리턴값은 Body를 통해 return 문자열이 리턴 된 것을 확인할 수 있다.ViewResolver를 통하여 View로 이동된게 아니라 문자열 그대로를 HttpBody에 담아 리턴 된 것 이다.
2. "/objTest"로 요청시
Object를 리턴값으로 지정했을때 HttpBody로 전달된 것은 생성한 객체의 값이 JSON 형태로 리턴되었다.
두개의 테스트를 진행 후 결과값을 확인해보았을때@RestController를 사용한다면 method에@ResponsBody를 사용하지 않고도 동일한 동작이 일어나는것을 확인 하였고, 리턴 타입에 따라 문자열 또는JSON으로의 리턴을 확인했다.