@Controller
컨트롤러 클래스에 @Controller 어노테이션을 쓴다.
해당 어노테이션이 적용된 클래스는 "Controller"임을 나타내고, bean으로 등록되어 해당 클래스가 Controller로 사용됨을 Spring Framework에 알린다.
@RequestMapping
요청 URL을 어떤 method가 처리할 지 mapping 해주는 어노테이션.
Controller나 Controller의 method에 적용한다.
요청 받는 형식을 정의하지 않으면, 자동으로 GET으로 설정.
ex) "/school" 요청에 대해 공통적으로 처리해야 될 클래스를 의미.
또한, 요청 url에 대해 해당 메소드에서 처리해야 되는 경우에도 사용.
@RequestMapping에 대한 모든 매핑 정보는 Spring에서 제공하는 HandlerMapping Class가 가지고 있다.
@Controller
@RequestMapping(path="/school")
public class SchoolApiController {
@Autowired
private schoolService schoolService;
@GetMapping
public String getSchoolInfo(@RequestParam int schoolId, ModelMap model) {
School shcoolInfo = schoolService.getSchoolInfoBySchoolId(schoolId);
model.addAttribute("schoolInfo", schoolInfo);
return "list";
}
}
@Controller 어노테이션을 통해 해당 클래스가 컨트롤러 클래스임을 spring framework에 전달하고, "/school" 로 들어오는 공통 요청 url 중 get 방식으로 들어오는 url을 처리하는 메소드인 예제.
@RestController
@Controller + @ResponseBody 이며, 메소드의 return 값을 문자열(JSON) 형태로 반환.
Spring의 Controller 중 View로 응답하지 않는 Controller.
API만 지원하는 클래스에 사용되며, json이나 xml과 같은 문자열 return이 주 목적.
@ResponseBody
메소드에 @ResponseBody 어노테이션이 있다면 리턴값이 View를 통해 출력되지 않고, HTTP Response Body에 직접 쓰여지게 된다.
이 때, 쓰여지기 전에 리턴되는 데이터 타입에 따라 MessageConverter에서 변환이 이뤄진 후 쓰여진다.
@RestController
@RequestMapping(path="/school")
public class SchoolApiController {
@Autowired
private SchoolService schoolService;
@PostMapping
public School saveSchoolInfo(@RequestBody School param) {
School saveInfo = schoolService.setSchoolInfo(param);
return saveInfo;
}
}
@Controller 어노테이션이 아닌, @RestController 어노테이션이므로 return을 view 페이지 대신 saveInfo 라는 객체를 JSON 형태로 변환한 데이터를 return한다.
@Controller vs @RestController
@Controller | @RestController |
API 사용과 View return을 동시에 하는 경우에 사용. API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체 반환 |
view가 필요없는 API 만 지원시 사용. @RestController = @Controller + @ResponseBody |
view 화면 return | data(JSON, xml 등) return |
아직 정리를 못한 어노테이션이 많다.
알지 못하는 어노테이션도 많다.
천천히 추가해나가자.