본문 바로가기
JAVA

HttpClient 클래스를 이용해서 REST API 사용하기

by mingutistory 2020. 4. 4.
728x90

나 빼고 이런 클래스들 그냥 다 어떻게 저절로 알게 되는 걸까 ? (아님 내가 모르는게 많은거임)

프로젝트 로그인 부분 구현은 또 HttpClient을 통해서 구현되어 있길래 찾아본다. 

 

 

public void post(String requestURL, String jsonMessage) {

try {
HttpClient client = HttpClientBuilder.create().build(); // HttpClient 생성
HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성
postRequest.setHeader("Accept", "application/json");
postRequest.setHeader("Connection", "keep-alive");
postRequest.setHeader("Content-Type", "application/json");
postRequest.addHeader("x-api-key", RestTestCommon.API_KEY); //KEY 입력
//postRequest.addHeader("Authorization", token); // token 이용시

+ nameNameValuePair¹ 인터페이스를이용한 request 객체 전달 방식


postRequest.setEntity²(new StringEntity(jsonMessage)); //json 메시지 입력

HttpResponse response = client.execute(postRequest);

//Response 출력
if (response.getStatusLine().getStatusCode() == 200) { // 정상호출 
ResponseHandler<String> handler = new BasicResponseHandler(); // 응답 처리
String body = handler.handleResponse(response);
System.out.println(body);
} else {
System.out.println("response is error : " + response.getStatusLine().getStatusCode());
}
} catch (Exception e){
System.err.println(e.toString());
}
}

출처: https://digitalbourgeois.tistory.com/58 [IT 글자국]

 

post.setEntity(new UrlEncodedFormEntity( -- );
HttpResponse res = client.execute(post);
ObjectMapper mapper = new ObjectMapper³();
String enty = EntityUtils.toString(res.getEntity());
JsonNode rootNode = mapper.readTree(enty);
asd = rootNode.get("response").asText();

 

 

+

1. NameValuePair 인터페이스

get 방식은 url에 매개변수를 포함해서 데이터 전송 <-> post 방식은 request 메세지를 바디에 포함해서 전송

서버에 전달하는 데이터는 보통 name, value 형식으로 구성. HttpClient 컴포넌트는 클라이언트에서 서버로 데이터를 전송하기 위해서 NameValuePair 인터페이스와 URIBuilder 클래스를 제공한다.

nameValuePair 인터페이스는 POST 방식에서 사용, URIBuilder 클래스는 GET 방식에서 사용함

 

NmaeValuePair 인터페이스 (리스트로 만들어서 보통 사용) > BasicNameValuePair 클래스 (1개의 데이터를 전달)

ex)

       ArrayList<NameValuePair> paramList = new ArrayList<NameValuePair>();
        paramList.add(new BasicNameValuePair("name", "javaking"));
        paramList.add(new BasicNameValuePair("blog", "javaking75.blog.me"));
[출처] [Java] Apache HTTP 컴포넌트 ( HttpClient ) - 데이터 추가하여 전송 (NameValuePair와 URIBuilder 클래스)|작성자 자바킹

2. Entity 관련 메소드 

아니 이건 진짜 왜 아무도 안 알려주지

다들 능숙하게 쓰는데 구글링 아무리 해도 나오지가 않는다. 그냥 왜 다들 쓰고 있지? 

 

3. ObjectMapper

json 형태를 다룰 때 사용함. java에서 json을 다룰 때 주로 사용하는 클래스는 GSON(구글에서 제공한 JSON 자바 라이브러리), JACKSON(JSON 자바 라이브러리)임 > 적은 데이터에서는 gson이 우수, 많은 데이터에서는 jackson이 우수함.

jackson : java object를 json으로 변환하거나 json을 java object로 변환하는데 사용 할 수 있는 java 라이브러리

 

readValue(arg, type)

arg : 지정된 타입으로 변환한 대상, type : 대상을 어떤 타입으로 변환할 것인지 클래스 명시함. 

readTree() 

* readValue() can be used for any and all types, including JsonNode . readTree() only works for JsonNode (tree model); 

 

아 어렵다

사고 싶은 책 있는데 알라딘 계속 오류나서 답답해 죽음

계속 찾으면서 느꼈는데 한 끗 더 아는 사람이 되기 위해선 역시 영어를 해야 되는 것 같다.

 

참고한 블로그

http://blog.naver.com/javaking75/220341345946

 

[Java] Apache HTTP 컴포넌트 ( HttpClient ) - 데이터 추가하여 전송 (NameValuePair와 URIBuilder 클래스)

[Java] HTTP 프로토콜을 손쉽게 사용할 수 있도록 도와주는 Apache HTTP 컴포넌트 ( HttpClien...

blog.naver.com

https://creatordev.tistory.com/62

 

Apache HttpClient 라이브러리를 통한 HTTP 통신 JSON 파싱 (1/3)

네트워크 통신에는 크게 2가지 방법이 존재 합니다. - 소켓 통신 (Socket) - URL통신 (HTTP) 두 통신에 대한 자세한 사항은 인터넷에서도 많이 있으니 따로 설명하지 않겠습니다. 다만, 이번 강의에서 다룰 내용인..

creatordev.tistory.com

 

300x250

댓글