Spring에서 클래스에 컨크롤러를 지정해 주기 위한 어노테이션은 @Controller와 @RestController가 있습니다
그렇다면
이 두 가지의 차이점은 무엇일까?
@Controller란?
@Controller는 주로 view(화면)를 변환하기 위해 사용함
@Controller
public class UserController {
private final UserService userService;
@GetMapping(value = "/users")
public @ResponseBody ResponseEntity<User> findUser(@RequestParam("userName") String userName){
return ResponseEntity.ok(userService.findUser(user));
}
@GetMapping(value = "/users/detailView")
public String detailView(Model model, @RequestParam("userName") String userName){
User user = userService.findUser(userName);
model.addAttribute("user", user);
return "/users/detailView";
}
}
@RestController란?
Restful Web Service에서 사용되는 컨트롤러 어노테이션입니다.
Spring MVC의 @RestController은 @Controller와 @ResponseBody의 조합입니다.
Spring 프레임 워크에서 RESTful 웹 서비스를 보다 쉽게 개발할 수 있도록 Spring 4.0에서 추가되었습니다.
근본적인 차이점은
@Controller의 역할은
Model 객체를 만들어 데이터를 담고 View를 찾는 것이지만,
@RestController는
단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답에 담아서 전송합니다.
@RestController
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@GetMapping(value = "/users")
public User findUser(@RequestParam("userName") String userName){
return userService.findUser(user);
}
// 클라이언트가 예상하는 HttpStatus를 설정해줄 수 없음
@GetMapping(value = "/users")
public ResponseEntity<User> findUserWithResponseEntity(@RequestParam("userName") String userName){
return ResponseEntity.ok(userService.findUser(user));
}
}
객체를 상황에 맞는 ResponseEntity로 감싸서 반환해 주어야 함
'CS' 카테고리의 다른 글
[CS] JDK란? (0) | 2024.05.08 |
---|---|
[CS] MVC 패턴이란? (0) | 2024.05.08 |
[CS] JPA란? (0) | 2024.05.08 |
[CS] Spring boot vs Spring Framework (0) | 2024.05.08 |
[CS] REST? REST API? RESTful? (0) | 2024.05.08 |