본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
카테고리 없음

[Spring] RequestEntity 사용하기, http 기반 응답 구현하기

by 미노드 2023. 6. 30.

Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다.
이것은 
HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader HttpBody를 포함하는 클래스이다.

HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다.
별도 포스팅으로 ResponseEntity를 설명하려함에도 같이 적는 이유는
RequestEntity, ResponseEntity가 세트로 사용되기 때문이다.
같이 사용함 으로써 간편하게 rest 전송 기능을 구현할 수 있다.
우선 RequestEntity에 대해 알아보자.

public RequestEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers,
			@Nullable HttpMethod method, URI url) {
			this(body, headers, method, url, null);
		}


RequestEntity의 매개변수로 header, body, method, url, type을 생성자 파라미터로 넘길 수 있다. 
위의 예시 생성자와 별개로, 원하는 조합대로의 매개변수를 가지고도 생성자 이용 가능하도록 구현되어있다.

header -> HttpHeaders 객체로 이용
body   -> String 또는 json / xml 형식
method -> get / post 인지 구분
url    -> String 요청할 서버 주소
type   -> ??

매개변수를 보면 알수 있듯 요청하기 위한 헤더, 바디, 방식, endpoint 를 요청 객채에 넣어 만들어두는 것이다.
이후에 RequestEntity 채로 전송하게 된다.

RequestEntity 전송하기

RequestEntity를 전송하려면 RestTemplate를 사용해야한다.
RestTemplateexchange 메소드에 RequestEntity를 넣으면, RequestEntity 안의 등록된 정보대로
요청을 진행하고, 응답을 ResponseEntity에 담아 반환한다.
RequestEntity, RestTemplate, ResponseEntity를 세트로 묶어 사용한다고 보면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
 
public void postRequestEntity(String jsonMessage,String action) {
    URI url = URI.create(HOST_URL+action);
        
    //header 생성
    HttpHeaders headers = new HttpHeaders();
    headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
    headers.add("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE + ";charset=UTF-8");
 
    //requestEntity 생성
    try {
           RequestEntity<String> req2 = RequestEntity.post(url)
        .headers(headers)
        .body(body);
 
       // 전송 및 응답은 어디서 확인함?
       // RestTemplate 을 통해 전송하고 response를 받아온다.
       RestTemplate rest = new RestTemplate();
    // RestTemplate의 exchange 메소드를 사용, ResponseEntity 형식으로 반환한다.
       ResponseEntity<String> responseEntity = rest.exchange(req2, String.class);
 
    System.out.println(responseEntity.getBody());
       System.out.println(responseEntity.getStatusCodeValue());
       System.out.println(responseEntity.getHeaders());
       System.out.println(responseEntity.getStatusCode());
       System.out.println(responseEntity.getClass());
       
       } catch (Exception e) {
        e.printStackTrace();
    }
}
cs

ResponseEntity로 받은 결과는 각각 원하는 값을 가져와서 출력시키고 활용할 수 있게 되어있다.

ResponseEntity 의 자세한 내용은 여기 참조.

https://teck10.tistory.com/357

 

[Spring] ResponseEntity 사용하기, http 기반 응답 구현하기

Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다. 이것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다. HttpEntity 클래스를 상속받

onpups.pe.kr