HTTP Response Body가 생성되는 방식
@Controller
1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다.
3. HandlerMapping을 통해 요청을 Controller로 위임한다.
4. Controller는 요청을 처리한 후에 ViewName을 반환한다.
5. DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게 반환한다.
@ResonseBody
어노테이션을 활용하여 json 형태로 데이터를 반환할 수 있다.
1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다.
3. HandlerMapping을 통해 요청을 Controller로 위임한다.
4. Controller는 요청을 처리한 후에 객체를 반환한다.
5. 반환되는 객체는 json으로 serialize 되어 사용자에게 반환된다.
StringHttpMessageConverter
MappingJackson2HttpMessageConverter
@Controller
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
// Data 반환
@GetMapping(value = "/users")
public @ResponseBody ResponseEntity<User> findUser(@RequestParam("userName") String userName){
return ResponseEntity.ok(userService.findUser(user));
}
// View 반환
@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
@Controller
에서 리턴값에 자동으로 @ResponseBody
가 붙어서 HTTP 응답 데이터에 Java 객체가 Mapping되어 전달된다. json 형태로 객체 데이터를 반환한다.
1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
2. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다.
3. HandlerMapping을 통해 요청을 Controller로 위임한다.
4. Controller는 요청을 처리한 후에 객체를 반환한다.
5. 반환되는 객체는 json으로 serializa 되어 사용자에게 반환된다.
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@GetMapping(value = "/users")
public User findUser(@RequestParam("userName") String userName){
return userService.findUser(user);
}
@GetMapping(value = "/users")
public ResponseEntity<User> findUserWithResponseEntity(@RequestParam("userName") String userName){
return ResponseEntity.ok(userService.findUser(user));
}
}
findUser
메서드는 User
객체를 그대로 반환한다. 이러한 경우에는 클라이언트가 예상하는 HttpStatus(e.g. 404)를 설정해줄 수 없다.ResponseEntity
로 감싸서 반환해주는 것이 좋다.