Java MVC 구조에서 Controller은 흐름을 제어하며, View를 반환하는 역할도 합니다. 하지만 Controller에서 View뿐만 아니라, Data(Json)를 반환해야 하는 경우도 있습니다. 그럴 때 @ResponseBody 어노테이션을 사용해 줍니다.
@Controller
@RequiredArgsConstructor
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));
}
@RestController는 @Controller에 @ResponseBody가 추가된 것으로 Json 형태로 데이터를 반환합니다.
@RestController
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@GetMapping(value = "/users")
public User findUser(@RequestParam("userName") String userName){
return userService.findUser(user);
}
이러한 경우 클라이언트가 예상하는 HttpStatus를 설정이 불가능하기 때문에, 따로 설정이 필요합니다.
@RequestMapping("/errorCode")
public ResponseEntity<Void> errorCode(){
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
리스트와 함께 404 에러 코드를 같이 보낼 수도 있습니다.
return new ResponseEntity<>(slist, HttpStatus.NOT_FOUND);
@RequiredArgsConstructor는 초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성해 줍니다.
새로운 필드를 추가할 때 다시 생성자를 만들어서 관리해야하는 번거로움을 없애줍니다. (@Autowired를 사용하지 않고 의존성 주입)
_참조: https://mangkyu.tistory.com/49