Controller에서 메소드에 @ResponseBody 어노테이션이 붙어 있다면 정해진 경로의 View가 아닌 HTTP Response Body 에 직접 쓰여지게 된다.
이때 리턴되는 데이터 타입에 따라 MessageConverter에서 변환이 이뤄진 후 쓰여진다.
Jackson's ObjectMapper 를 사용하여 request, response 를 JSON 으로 변환할때 사용되는 MessageConverter 이다. applicaton/json 을 지원한다.
매번 메소드마다 @ResponseBody를 붙이기는 비효율적이니 @ResponseBody가 등록된 @RestController를 클래스 어노테이션에 추가해서 전체를 한번에 설정해줄 수 있다.
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping( value="/json/{id}", method = RequestMethod.GET)
@ResponseBody
public UserModel getByIdInJSON( @PathVariable String id){
UserModel user = new UserModel();
user.setId( id);
user.setName( "ellie");
return user;
}
@RequestMapping( value="/html/{id}", method = RequestMethod.GET)
public String getByIdInHTML( @PathVariable String id, ModelMap model){
UserModel user = new UserModel();
user.setId( id);
user.setName( "ellie");
model.addAttribute( "user", user);
return "user";
}
}
리턴값이 UserModel 객체가 MessageConvert 로 설정된 MappingJacksonHttpMessageConverter 에서 JSON 으로 변환 작업 진행
ViewResolver 에 의해 선택된 /WEB-INF/jsp/user.jsp 에서 처리 진행