728x90
320x100
📌 @Controller
⚡ View 반환
- 전통적인 Spring MVC의 컨트롤러
- 주로 View를 반환하기 위해 사용
- Client는 URI 형식으로 웹 서비스에 요청을 보냄
- DispatcherServlet이 요청을 처리할 대상을 찾음
- HandlerAdapter을 통해 Controller로 위임
- Controller는 요청을 처리한 후에 ViewName을 반환
- DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게 반환함
➡ Controller가 반환한 뷰의 이름으로부터 View를 렌더링하기 위해서는 ViewResolver가 사용되며, ViewResolver 설정에 맞게 View를 찾아 렌더링 된다.
⚡ Data 반환
@ResponseBody
어노테이션 사용- Controller가
JSON
형태로 데이터 반환
- Client는 URI 형식으로 웹 서비스에 요청을 보냄
- DispatcherServlet이 요청을 처리할 대상을 찾음
- HandlerAdapter을 통해 요청을 Controller로 위임
- Controller는 요청을 처리한 후에 객체 반환
- 반환되는 객체는 Json으로 Serialize되어 사용자에게 반환
- Controller로 객체를 반환할 때는
ResponseEntity
로 감싸서 반환 viewResolver
대신HttpMessageConverter
가 동작함HttpMessageConverter
에는 여러 Converter가 등록되어 있고, 반환해야 하는 데이터에 따라 사용되는 Converter가 달라짐- 단순 문자열 :
StringHttpMessageConverter
- 객체 :
MappingJackson2HttpMessageConverter
예시
@Controller
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@GetMapping("/users")
public @ResponseBody ResponseEntity<User> findUser(@RequestParam("userName") String userName){
return ResponseEntity.ok(userService.findUser(user));
}
@GetMapping("/users/detailView")
public String detailView(Model model, @RequestParam("userName") String userName){
User user = userService.findUser(userName);
model.addAttribute("user", user);
return "/users/detailView";
}
}
반응형
📌 @RestController
@Controller
에@ResponseBody
가 추가된 것- JSON 형태로 객체 데이터를 반환
REST API
를 개발할 때 주로 사용- 객체를
ResponseEntity
로 감싸서 반환
- Client는 URI 형식으로 웹 서비스에 요청을 보냄
- DispatcherServlet이 요청을 위임할 HandlerMapping을 찾음
- HandlerMapping을 통해 요청을 Controller로 위임함
- Controller는 요청을 처리한 후에 객체를 반환함
- 반환되는 객체는 Json으로 Serialize되어 사용자에게 반환됨
예시
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@GetMapping("/users")
public User findUser(@RequestParam("userName") String userName){
return userService.findUser(user);
}
@GetMapping("/users")
public ResponseEntity<User> findUserWithResponseEntity(@RequestParam("userName") String userName){
return ResponseEntity.ok(userService.findUser(user));
}
}
⚡ @Controller와 @RestController의 차이점
@Controller
- 클래스를 Spring MVC 컨트롤러로 표시하는데 사용됨
- Spring이 주석을 지원기 시작한 이후에 존재하며 공식적으로 Spring 2.5 버전에서 추가됨
- 뷰의 이름을 리턴하기도 함
- @Component가 달려있음
@RestController
- RESTful 웹 서비스에서 사용되는 특수 컨트롤러
- @Controller + @ResponseBody와 동일
- Spring 4.0에서 추가됨
- @Controller와 @ResponseBody 주석이 달린 컨트롤러임
- 모든 메소드가 뷰 대신 객체로 작성됨
Reference
728x90
반응형
'Spring > spring boot' 카테고리의 다른 글
[Spring boot] @AutoConfigureMockMvc, @WebMvcTest (0) | 2024.03.12 |
---|---|
Lombok (롬복)이란? (0) | 2024.02.04 |
[Spring boot] H2 Console 접속 에러 (0) | 2024.01.27 |
[spring boot] 스프링/스프링 부트란? (0) | 2024.01.20 |