[웹 스터디]컨트롤러 레이어 : 스프링 REST API 컨트롤러

박준수·2022년 11월 23일
0

[웹 스터디]

목록 보기
9/19

RequestMapping/GetMapping

REST API를 구현하므로 @RestController 어노테이션을 이용해 이 컨트롤러가 RestController임을 명시한다. @RestController를 이용하면 http 관련된 코드 및 요청/응답 매핑을 스프링이 알아서 해준다.

  • GetMapping 어노테이션을 이용해 이 메서드의 리소스와 HTTP메서드를 지정한다.
  • 클라이언트가 이 리소스에 대해 Get 메서드로 요청하면, @GetMapping에 연결된 컨트롤러가 실행된다.
  • "http://localhost:8080/test"의 Get Method는 testController()에 연결된다는 뜻이다.

URI 경로를 꼭 @RequestMapping에서만 지정할 수 있는 것은 아니고 @GetMapping에서도 URI 경로를 지정할 수 있다.

매개변수를 넘겨 받는 방법

만약 /test가 아닌 /test/{id}처럼 PathVariable이나 /test?id=123처럼요청 매개 변수를 받아야 한다면 어떻게 해야할까?

PathVariable


@GetMapping("/{id}")의 매개변수 /{id}는 경로로 들어오는 임의의 숫자 또는 문자를 변수 id에 매핑하라는 뜻이다.(required = false)는 이 매개변수가 꼭 필요한건 아니라는 듯이다. 따라서 id=123을 명시하지 않아도 에러가 나지 않는다.

RequestParam


요청을 다음과 같이 했을 때 결과가 같다.

@RequestBody

@RequestBody를 사용하는 방법이다. RequestBody는 보통 반환하고자 하는 리소스가 복잡할 때 사용한다. 기본 자료형이 아닌 오브젝트처럼 복잡한 자료형을 통째로 요청에 보내고 싶은 경우에 해당한다.

@RequestBody TestRequestBodyDTO testRequestBodyDTO는 RequestBody로 날아오는 JSON을 TestRequestBodyDTO 오브젝트로 변환해 가져오라는 뜻이다.


@RestController

응답으로 오브젝트를 리턴할 수 있다.

@RestController는 안을 들여다보면 크게 두 어노테이션의 조합으로 이루어져 있는데
@Controller와 @ResponseBody이다.

@Controller는 더 들여다보면 @Component로 스프링이 이 클래스의 오브젝트를 알아서 생성하고 다른 오브젝트들과의 의존성을 연결한다는 뜻이다.

@ResponseBody는 메서드가 리턴할 때 스프링은 리턴된 오브젝트를 JSON의 형태로 바꾸고 HttpResponse에 담아 반환한다는 뜻이다.

ResponseDTO

이 프로젝트에서의 모든 컨트롤러는 ResponseDTO를 반환할 예정이다.

ResponseEntity

ResponseEntity는 HTTP 응답의 바디뿐만 아니라 여러 다른 매개변수들, 예를 들어 status나 header를 조작할고 싶을 때 사용한다.

리턴된 Body에는 아무 차이가 없다. 단지 헤더와 HTTP status를 조작할 수 있다는 점이 다르다.

결론 :
주로 HTTP요청과 응답을 어떻게 넘겨받고 리턴하느냐, 즉 외부세계와 통신하기 위한 규약을 정의했다.

profile
방구석개발자

0개의 댓글