memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

@Controller 어노테이션을 이용하면 기본적으로 view 페이지를 찾아서 띄어주는 역할을 한다.

하지만 REST API를 개발해야하는 상황이라면 각 메소드마다 @ResponseBody를 붙여서 데이터를 그대로 반환하도록 할 수 있다. (아래 글  참고)

 

2021.05.17 - [Spring] - @ResponseBody를 이용하여 데이터 반환

 

@ResponseBody를 이용하여 데이터 반환

보통은 @Controller 어노테이션을 이용하여 Controller 를 생성했을때, (ViewResolver에 의해) return 값으로 반환하는 문자열 이름의 view 페이지를 띄어준다. (아래 예시 코드 참고) 더보기 HelloCotroller.java..

memostack.tistory.com

 

하지만, 위 방법은 번거롭기 때문에 @RestController를 사용하면 편하다.

 

1. @RestController

@Controller 와 @ResponseBody를 이용하여 API를 작성할 때는 아래와 같이 했지만,

<java />
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class FirstController { @ResponseBody // View 페이지가 아닌 응답값 그대로 반환하기 위해 사용 @RequestMapping(value = "/helloworld", method = RequestMethod.GET) public String helloWorld() { return "hello world"; } }

 

@RestController를 사용하면, 아래처럼 @ResponseBody 어노테이션을 붙이지 않아도 된다.

  • 아래 예제에서는 메소드가 1개지만, 메소드가 여러개인 경우 @Controller와 @ResponseBody를 이용할때보다 훨씬 간편
<java />
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class SecondController { @RequestMapping(value = "/hellospring", method = RequestMethod.GET) public String helloSpring() { return "Hello Spring"; } }

Hello Spring

 

1.1. 예제. 회원 REST API

이를 활용하여 간단한 회원 CRUD REST API를 생성해보면,

  • 비즈니스 로직은 생략
<java />
@RestController @RequestMapping("/api/v1/user") public class UserController { @Autowired private UserService userService; /** * 모든 회원 정보를 가져오는 API * @return ResponseEntity<List<UserResponse>> 200 OK, 회원 정보 목록 */ @GetMapping("") public ResponseEntity<List<UserResponse>> getAllUser() { List<UserResponse> userList = userService.getAllUser(); return ResponseEntity.status(HttpStatus.OK).body(userList); } /** * 회원 정보를 가져오는 API * @param id 회원의 ID (PK) * @return ResponseEntity<UserResponse> 200 OK, 회원 정보 */ @GetMapping("/{id}") public ResponseEntity<UserResponse> getUser(@PathVariable("id") long id) { UserResponse userResponse = userService.getUser(id); return ResponseEntity.status(HttpStatus.NO_CONTENT).body(userResponse); } /** * 회원 가입 API * @param userRequest 회원 정보 * @return ResponseEntity<UserResponse> 201 Created, 가입된 회원의 정보 */ @PostMapping("") public ResponseEntity<UserResponse> signUp(@RequestBody UserRequest userRequest) { UserResponse user = userService.insert(userRequest); return ResponseEntity.status(HttpStatus.CREATED).body(user); } /** * 회원 정보 수정 API * @param id 회원의 ID (PK) * @param userRequest 회원 정보 * @return ResponseEntity<UserResponse> 200 OK, 수정된 회원의 정보 */ @PutMapping("/{id}") public ResponseEntity<UserResponse> update(@PathVariable("id") long id, @RequestBody UserRequest userRequest) { UserResponse user = userService.update(userRequest); return ResponseEntity.status(HttpStatus.OK).body(user); } /** * 회원 탈퇴(삭제) API * @param id 회원의 ID (PK) * @return ResponseEntity<Object> 204 No Content */ @DeleteMapping("/{id}") public ResponseEntity<Object> delete(@PathVariable("id") long id) { userService.delete(id); return ResponseEntity.status(HttpStatus.NO_CONTENT).body(null); } }
반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!