- HTTP는 GET/POST/PUT/DELETE/OPTIONS 등과 같은 메서드와 URI를 이용해 서버에 HTTP 요청을 보낸다.
- 서버는 자기 주소를 제외한 /{리소스} 부분을 해석하고, 이 요청이 어떤 HTTP 메서드를 이용했는지 확인 후, 해당 리소스의 HTTP 메서드에 연결된 메서드를 실행한다.
@RestController
@RestController
@RequestMapping("/test") // 리소스
public class TestController {
@GetMapping
public String testController() {
return "hello";
}
}
- @RestController 어노테이션은 해당 컨트롤러가 RestController 임을 명시하고, 스프링은 HTTP와 관련된 코드 및 요청/응답 매핑을 처리해준다.
- @GetMapping 어노테이션을 이용하면 이 메서드의 리소스와 HTTP 메서드를 지정할 수 있다.
- @GetMapping 이외에도 @PostMappint, @PutMapping, @DeleteMapping을 사용할 수 있다.
HTTP 요청
@PathVariable - 경로변수
- 리소스 경로에 식별자를 넣는 방식으로, /{id}와 같이 URI의 경로로 넘어오는 값을 변수로 받을 수 있다.
- @RequestMapping은 URL 경로를 템플릿화 할 수 있는데, @PathVariable을 사용하면 매칭되는 부분을 편리하게 조회할 수 있다.
@GetMapping("/{id}")
public String testController(@PathVariable(required = false) int id) {
return "hello" + id;
}
@RequestParam - 쿼리 파라미터
- ?id={id}와 같이 요청 매개변수로 넘어오는 값을 변수로 받을 수 있다.
- 스프링이 파라미터 이름으로 바인딩해주기 때문에 요청 파라미터를 편리하게 사용할 수 있다.
@GetMapping
public String testController(@RequestParam(required = false) int id) {
return "hello" + id;
}
@RequestBody - 객체 파라미터
- RequestBody로 보내오는 JSON을 Dto와 같은 오브젝트로 변환해 가져온다.
- 클라이언트는 요청 바디로 JSON 형태의 문자열을 넘겨주며, JSON의 내부는 의미적으로 Dto와 같아야 한다.
@PostMapping
public String testController(@RequestBody testDto dto) {
return "hello" + dto.getId();
}
HTTP 응답
@ResponseBody
- 메서드가 리턴하는 것은 웹 서비스의 ResponseBody라는 뜻으로, 문자열보다 복잡한 오브젝트를 리턴할 수 있다.
- @RestContoller에 포함되어 있으므로, @RestContoller를 지정한 경우 오브젝트만 리턴해주면 된다.
- 메서드가 리턴할 때 스프링은 리턴된 오브젝트를 JSON 형태로 바꾸고 HttpResponse에 담아 반환한다.
- 이때 오브젝트를 저장하거나 네트워크를 통해 전달할 수 있도록 변환하는 것을 직렬화라고 한다.
@GetMapping
public ResponseDto testController() {
...
return response;
}
@ResponseEntity
- HTTP 응답의 바디뿐만 아니라 여러 다른 매개변수들(status, header 등)을 조작하고 싶을 때 사용한다.
- 헤더와 HTTP Status를 조작할 수 있다는 점을 제외하고는 리턴된 바디는 @ResponseBody와 동일하다.
@GetMapping
public ResponseEntity<?> testController() {
...
return ResponseEntity.ok().body(response);
}
'Spring > Rest API' 카테고리의 다른 글
REST 서비스 사용 (0) | 2022.01.30 |
---|---|
스프링 데이터 REST (0) | 2022.01.30 |
REST 엔드포인트 정의 (0) | 2022.01.30 |
REST API 인증 기법 (0) | 2022.01.20 |
REST 아키텍처 패턴 (0) | 2022.01.20 |