블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
@Controller
어노테이션을 이용하면 기본적으로 view 페이지를 찾아서 띄어주는 역할을 한다.
하지만 REST API
를 개발해야하는 상황이라면 각 메소드마다 @ResponseBody
를 붙여서 데이터를 그대로 반환하도록 할 수 있다. (아래 글 참고)
2021.05.17 - [Spring] - @ResponseBody를 이용하여 데이터 반환
하지만, 위 방법은 번거롭기 때문에 @RestController를 사용하면 편하다.
@RestController
@Controller 와 @ResponseBody를 이용하여 API를 작성할 때는 아래와 같이 했지만,
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를 이용할때보다 훨씬 간편
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";
}
}
예제. 회원 REST API
이를 활용하여 간단한 회원 CRUD REST API
를 생성해보면,
- 비즈니스 로직은 생략
@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);
}
}
반응형
'Backend > Spring Boot' 카테고리의 다른 글
Spring @RequestBody, Java 객체에 JSON 데이터를 매핑 (0) | 2021.05.17 |
---|---|
JPA Fetch 종류 (LAZY Fetch와 EAGER Fetch) (0) | 2021.03.27 |
Spring Boot에서 AOP 구현 (Aspect Oriented Programming) (0) | 2021.03.11 |
Spring Boot 에서 JWT 적용 (Maven 환경) (0) | 2021.01.21 |
SpringBoot, Junit5에서 REST API(Controller) 테스트 (0) | 2021.01.15 |