애노테이션 @RestController 를 사용하려는 컨트롤러에 붙이게 되면
해당 컨트롤러를 new 해서 spring 이 집어넣어줄거고 (bean)
생성된 컨트롤러 객체는 개발자와 상관 없이 dispatcher 가 사용
→ dispatcher 는 사용자가 request 요청할 때 작동 된다
(request 요청은 웹브라우저를 통해서 이루어진다)
따라서 웹브라우저 요청이 들어오면 제일 처음으로 dispatcher 가 발동 되고
얘가 요청 주소를 받아 IoC 컨테이너에서 해당 컨트롤러를 찾아냄
찾아내서 맞는 주소로 함수를 호출해준다.
⇒ parsing 해서 분기시켜준다는 얘기야
그냥 컨트롤러랑 똑같은데 파일이 아니라 데이터를 리턴해줌!!
예시 보고 가세요~~.~~
@RestController // IoC -> 컨테이너 등록 => 해당 객체는 디스패쳐가 사용함
// 데이터를 리턴
public class UserController {
@CrossOrigin // 다른 포트에서 요청 가능하도록 (cors 정책 무시)
@GetMapping("/user/{id}")
public User findById(@PathVariable int id) {
System.out.println("findById 나 실행 됨?");
User user = new User(id, "ssar", "1234", "[email protected]");
return user;
}
// POST : <http://localhost:8080/user>
// BODY : x-www-form-urlencoded (key=value) -> 자바의 기본 MIME 타입
// BODY : json ({"key" : "value"}) -> 그래서 이런 형식의 데이터가 오면 파싱 못. 그래서
// BufferedReader로 읽어준다고
@PostMapping("/user")
public User save([*@RequestBody*](<https://jungspin.notion.site/RequestBody-32d55334d94f4c27b0861ba18372a3fd>) User user) { // BufferedReader로 읽는게 @RequestBody
user.setId(2);
return user;
}
}