Controller와 RestController의 작성

Doridam·2023년 6월 5일
0

Spring🌱 & Boot 🌼

목록 보기
9/12


Controller와 RestController

Controller

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 선언 상단에 @Controller Annotation을 붙인 후 메소드에 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 선언 상단에 @RestController Annotation을 붙인 후 적용할 메소드에 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으로의 리턴을 확인했다.

profile
도리도리담담 🐤🐥🐤🐥🐣🐣

0개의 댓글