네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

 

Controller

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있다.

전통적인 Spring MVC 컨트롤러인 @Controller와 Restful 웹 서비스의 컨트롤러 @RestController의 큰 차이점은 HTTP Response Body가 생성되는 방식이다.

 

1. @Controller (Spring MVC Controller)

[Controller - View]

전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용한다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환한다.

1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

2. Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

3. Controller가 요청을 처리한 후에 응답을 DispatcherServlet으로 반환하고, DispatcherServlet은 View를 사용자에게 반환한다.

 

[Controller - Data]

Spring MVC Controller 에서 Data를 반환해야 하는 경우가 있다. Spring MVC의 컨트롤러에서는 데이터를 반환하기 위해 @ResponseBody 어노테이션을 활용해야 한다. 이를 통해 Controller도 JSON 형태로 데이터를 반환할 수 있다. 

1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

2. Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

3. @ResponseBody를 사용하여 Client에게 Json 형태로 데이터를 반환한다.

 

2. @RestController (Spring RESTful Controller)

Spring MVC 프레임워크에서 REST API를 구현할 때, 컨트롤러에 @RestController 어노테이션을 붙인다.

RestController의 액션 메소드가 리턴하는 Java 객체는 자동으로 JSON 포맷으로 변환되어 클라이언트에 전송된다.

RestController의 액션 메소드는 데이터를 클라이언트에 전송하기 때문에 뷰(view)가 필요 없다.

Spring MVC Controller에 @ResponseBody가 추가된 것이다. RestController의 주용도는 Json/xml 형태로 객체 데이터를 반환하는 것이다.

 

 

1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

2. Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.

3. RestController는 해당 요청을 처리하고 데이터를 반환한다. 

 

 

컨트롤러의 엑션 메소드 앞에 @ReponseBody 어노테이션을 붙이면, 이 액션 메서드가 리턴하는 Java 객체는 자동으로 JSON 포맷으로 변환되어 클라이언트에 전송된다.

@Controller 
public class StudentController { 
	public @ResponseBody List<Student> students() {
    		List<Student> list = ...; 
        	return list; 
    }
}

컨트롤러 앞에 @RestController 어노테이션을 붙였다면, 그 컨트롤러의 액션 메소드 앞에 @ResponseBody 어노테이션을 붙이지 않고 생략해도 된다.

@RestController
public class StudentController { 
	public List<Student> students() { 
    		List<Student> list = ...; 
        	return list; 
    }
    
}

RestController의 액션 메서드가 액션 메서드를 호출할 때 전송하는 request parameter 데이터도 JSON 포맷으로 전송하는 것이 일관적이라 좋다.

이렇게 JSon 포맷으로 전송된 request parameter 데이터를 받을 액션 메서드의 파라미터 변수에는 @RequestBody 어노테이션을 붙여주어야 한다.

public String update(@RequestBody Student student) { ... }
728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !