@RestController와 @Controller의 차이
@Controller
이렇게 하고 실행하면
Error resolving template [a], template might not exist or might not be accessible by any of the configured Template Resolvers
이런 오류가 뜬다.
@RestController
하지만 @Controller 대신에 @RestController를 사용하게 되면, 위와 같이 페이지가 잘 나타난 것을 확인할 수 있다.
@Controller
이 어노테이션을 사용한 클래스는 일반적으로 뷰 렌더링을 위해 사용되며, HTML을 포함한 다양한 타입의 응답을 생성할 수 있다. 주로 서버 사이드 렌더링을 위해 사용된다.
@RestController
RESTful 웹 서비스를 개발할 때 사용된다. 이 어노테이션을 사용한 클래스는 JSON, XML 등의 형식으로 데이터를 직접 반환할 때 사용한다. 내부적으로 @ResponseBody 어노테이션을 포함하고 있어, 메서드의 반환 값은 자동으로 HTTP 응답의 본문으로 변환된다.
따라서, @Controller는 주로 뷰를 렌더링하기 위해 사용하며,
@RestController는 JSON, XML 등의 데이터를 직접 반환하기 위해 사용한다.
또, @RestController는 @Controller와 @ResponseBody를 결합한 형태이기도 하다.
만약 Controller에서 문자열 데이터를 띄우고 싶다면, response로 html을 직접 그리고, thorws 처리를 해주면된다.
@RequestMapping
RequestMapping은 GET, POST, PUT, PATCH , DELETE, HEAD 등 모든 메서드로 받아줄 수 있다.
위 코드는 @RequestMapping과 @GetMapping 둘다 같은 주소를 갖고 있다. 실행하면 어떻게 될까?
@GetMapping 주소값으로 실행된 것을 확인할 수 있다.
요청 메서드에 따라 다른 메서드를 호출하는 방식을 사용할 때,
주소가 동일한 경우에는 가장 구체적인 어노테이션이 우선순위를 가진다.
따라서 이 경우에는 @GetMapping 어노테이션이 @RequestMapping의 POST 요청보다 우선되어 호출되게 된다.
만약 PostMapping과 GetMapping 어노테이션을 동일한 주소에 사용하고 싶다면,
메서드 이름을 변경하거나 @RequestMapping을 사용하여 요청 메서드에 상관없이 호출되도록 설정할 수 있다.
@PathVariable ( 경로변수 )
이런식으로 경로에 path를 설정함으로써 @PathVariable에 path값을 맞춰주면 사용할 수 있다.
두번째 사진과 같이 변수명을 경로 path 값과 맞춰주면 생략도 가능하다.
@RequestMapping과 관련된 어노테이션들로 get, post, patch, delete 들을 사용해 PathVariable 을 사용해봤다.
또한, 클래스에서 RequestMapping에 경로를 설정해주면 아레 메소드에서 생략가능하다.
'✨ Back-end > etc' 카테고리의 다른 글
@ModelAttribute사용하여 극한으로 코드 줄이기 (0) | 2023.09.02 |
---|---|
@RequiredArgsConstructor , @PostConstruct (0) | 2023.09.02 |
스프링(Spring) MVC 패턴에 대한 개념과 동작 순서 (0) | 2023.08.29 |
로깅(Logging) 에 대해서, 왜 써야하는지? @Slf4j 어노테이션 (0) | 2023.08.27 |
[Spring] AOP 개념과 용어 8가지 (0) | 2023.08.25 |
댓글