새소식

인기 검색어

Programming/Spring

[Spring] 다양한 Request 방식

  • -

클라이언트의 request를 받을 때 Spring에는 다양한 방식이 존재한다.

어떤 상황에 어떤 request 방식을 선택해야하며, 왜해당 방식을 선택해야 하는지 등에 관해서 학습이 필요했다.

 

이를 학습하기 전, 선행되어야 되는 내용이 있으니 먼저 알아보자.


1. Query String parameter

search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=hi

 

● 엔드포인트에서 물음표(?) 뒤에 나오는 부분을 query string parameter라고 부른다.

 

2. Path parameter

/service/myresource/user/{user}/bicycles/{bicycleId}

 

● path parameter는 엔드포인트의 일부이다. 예를 들어, 아래의 엔드포인트에서 {user}와 {bicycleid}에 각각 그 값이 들어간다고 보면 된다.

 

3. Request Body parameter

{
    "data" :  1,
    "date" : "20221130"
}

 

● 보통 POST request는 JSON 객체를 request body에 넣어 보낸다. 이것이 request body parameter이며 주로 JSON으로 이루어져있다.

 

 

4. JSON(JavaScript Object Notation)

{
    "data" :  1,
    "date" : "20221130"
}

 

● 속성과 값 또는 키와 값으로 이루어진 데이터 교환 형식

 


위 4가지 내용들은 클라이언트로부터 파라미터를 받아올 때 필요한 방식과 데이터 형식이다.

그럼 'Spring의 Controller는 클라이언트의 다양한 요청 방식을 어떻게 처리할까?'에 대한 궁금증을 해결해보자.


1. @PathVariable

@GetMapping("/memo/{id}")
public MemoResponseDto getMemo(@PathVariable long id){return memoService.getMemo(id);}

 

● Path parameter를 통해 request 요청이 온다면 사용한다.

● 템플릿 변수의 값을 추출하고 그 값을 메소드 변수에 할당하는데 사용된다.

● Path parameter에 다수의 템플릿 변수가 존재할 시, @PathVariable도 지정된 변수의 개수의 수와 맞춰주어야 한다.

 

2. @RequestParam

@GetMapping("/memos?id={id}")
public MemoResponseDto createMemo(@RequestParam String id){
        return memoService.createMemo(id);
}

 

● Query String parameter에서 값을 가져온다.

● @RequestParam으로 데이터를 받을 때는 데이터를 저장하는 이름으로 메소드의 파라미터명을 설정해줘야 한다.

● 해당하는 데이터만 받아올 수 있다. (객체 X)

 

3. @RequestBody

@PostMapping("/memos")
public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto){
        return memoService.createMemo(requestDto);
}

 

● JSON 데이터를 원하는 타입의 객체로 변환해야 하는 경우에 사용

●  Http 요청의 Body를 자바 객체로 받을 수 있게 해준다.

● 주로 비동기 처리 구현 시 @ResponseBody와 함께 자주 사용한다.

 

4. @ResponseBody

 

●  해당 어노테이션을 가진 메소드의 리턴값은 반드시 HTTP 요청 본문(response body)에 바인딩된다.

'Programming > Spring' 카테고리의 다른 글

[Spring] Annotation (2)  (1) 2022.12.08
[Spring] Annotation (1) (Lombok, JPA)  (0) 2022.12.08
[Spring] Spring Framework란?  (0) 2022.12.08
[Spring] Transactional  (0) 2022.12.02
[Spring] Controller Service Repository Annotation  (0) 2022.12.01
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.