@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

 


아직 정리를 못한 어노테이션이 많다.

알지 못하는 어노테이션도 많다.

천천히 추가해나가자.

+ Recent posts