@RestController의 동작방식
@RestController 는 @Controller 어노테이션과 @ResponseBody 어노테이션을 합쳐놓은 어노테이션이다. 클래스 상단에 @RestController 어노테이션을 선언하면 Method마다 @ResponseBody를 붙여 주지 않아도 된다.
즉
동일한 동작을 한다고 말할 수 있다.
@Controller와 @RestController 방식의 차이점을 알아보자.
- 스프링 Controller는 일반적으로 View Page 이름을 리턴해주어 사용자에게 뷰페이지를 출력하게 해준다. 그림을 보면 어떤 흐름으로 동작하는지 볼 수 있다.
사용자의 요청이 오면 등록된 ViewResolver를 통해 사용자에게 text/html 타입의 응답을 보내주게 된다.
@Controller public class testController { @Autowired MemberService mservice; // ViewResolver를 통해 사용자에게 text/html 컨텐츠 타입을 리턴 @RequestMapping("/yeah2") public String test1(){ return "test"; }
- 그에반해 @RestController 에서 return 되는 값은 View Page를 통해 출력되는 것이 아니라 HTTP ResponseBody에 직접 쓰여지게 된다.
사용자의 요청이 오면 MessageConverter를 통해서 application/json, text/plain 등 알맞는 형태로 리턴되게 된다.
@RestController
public class HomeController2 {
@Autowired
MemberService mservice;
private static Logger logger = LoggerFactory.getLogger(HomeController2.class);
@RequestMapping(value="/register",method=RequestMethod.GET)
public List<MemberVO> register() throws Exception {
//MappingJackson2HttpMessageConverter 를 통해서 application/json 컨텐츠 타입을 리턴
return mservice.selectMember();
}
@RequestMapping(value="/register",method=RequestMethod.GET)
public String texttest() throws Exception {
// StringHttpMessageConverter 를 통해서 text/plain 컨텐츠 타입을 리턴
return "text test";
}
JSON return
text return
결론
일반적은 Spring MVC @Controller와 RESTful 컨트롤러인 @RestController의 차이점은 HTTP Response Body가 생성되는 방식이다.
@Controller 는 View Page를 반환하지만, @RestController는 객체(VO,DTO)를 반환하기만 하면, 객체데이터는 application/json 형식의 HTTP ResponseBody에 직접 작성되게 된다.
'Programming > Spring' 카테고리의 다른 글
[JPA] find date between 날짜 사이 찾기 (0) | 2021.02.05 |
---|---|
[JPA] Entity와 Repository의 관계, Repository의 기본 메서드/추가 메서드 (0) | 2021.02.05 |
SpringMVC Controller 생성하기 (0) | 2021.01.31 |
@Transactional 이란? (0) | 2021.01.31 |
@ReqeustBody와 @ResponseBody 언제 사용할까? (0) | 2021.01.31 |