반응형
스프링 부트 1.5.9.RELEASE 버전이라서 httpClient 사용진행
참고로, Apache HttpClient는 Java 11부터는 deprecated 되어
Java 11 이상의 버전에서는 java.net.http.HttpClient를 사용하는 것이 권장
2.x 이상의 경우는 webClient 사용권장
1. 의존성 추가하기 ( 테스트 코드는 밑에 있음)
Maven Pom.xml
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
Gradle build.gradle
dependencies {
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
}
2. HttpClient 인스턴스 생성
CloseableHttpClient httpClient = HttpClients.createDefault();
3. Http 요청 구성하기
Get
HttpGet httpGet = new HttpGet("http://example.com/api/resource");
Post
HttpPost httpPost = new HttpPost("http://example.com/api/resource");
httpPost.setEntity(new StringEntity("request body"));
header (옵션)
httpGet.addHeader("Authorization", "Bearer your_token");
4. 요청실행
CloseableHttpResponse response = httpClient.execute(httpGet);
5. 응답처리
try {
int statusCode = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity);
// 응답 처리 로직 작성
// statusCode, responseBody 등을 활용
} catch(Exception e) {
}
finally {
response.close();
}
6. httpClient 인스턴스 닫기
httpClient.close();
- 요청 테스트 최종 코드
인터페이스 및 서비스 단만 처리
인터페이스
public interface SendMessage {
returnCode sendMessageService(String sendId, String sendName, List<String> receiveIds, String sendTitle, String sendMessage) throws Exception;
}
서비스
@Service
public class SendMessageServiceImpl implements SendMessage {
@Override
public returnCode sendMessageService(String sendId, String sendName, List<String> receiveIds, String sendTitle, String sendMessage) throws Exception {
returnCode returnCode = returnCode.SUCCESS;
String sendDNS = "http://test.com";
String testURL = "http://127.0.0.1:8080/views/test/testURL.jsp";
//HttpClient 인스턴스 생성하기
CloseableHttpClient httpClient = HttpClients.createDefault();
URIBuilder uriBuilder = new URIBuilder(testURL);
sendId = (sendId == null) ? "testId" : sendId;
sendName = (sendName == null) ? "testName" : sendName;
sendTitle = (sendTitle == null) ? "testTitle" : sendTitle;
sendMessage = (sendMessage == null) ? "testMessage" : sendMessage;
uriBuilder.setParameter("sendId", sendId);
uriBuilder.setParameter("sendName", sendName);
StringBuilder receiveIdBuilder = new StringBuilder();
// receiveIds 를 여러개 받아 처리 (리스트사용)
//receveId 가 여러개이기 때문에 ; 로 구분하기 위함
for (String receiveId : receiveIds) {
if (receiveIds.size() > 1) {
receiveIdBuilder.append(receiveId).append(";");
} else {
receiveIdBuilder.append(receiveId);
}
}
String appendReceiveIds = String.valueOf(receiveIdBuilder);
if (!appendReceiveIds.isEmpty()) {
if (receiveIds.size() > 1) {
appendReceiveIds = appendReceiveIds.substring(0, appendReceiveIds.length() - 1);
}
uriBuilder.setParameter("receiveId", appendReceiveIds);
}
uriBuilder.setParameter("sendTitle", sendTitle);
uriBuilder.setParameter("sendMessage", sendMessage);
URI uri = uriBuilder.build();
//System.out.println("URI : " + uri);
HttpGet httpGet = new HttpGet(uri);
//System.out.println("HTTPGET : " + httpGet);
//요청 실행
CloseableHttpResponse response = httpClient.execute(httpGet);
try {
//응답 상태 코드 확인
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity, "UTF-8");
System.out.println(responseString);
} else {
returnCode = returnCode.INVALID_DATA;
}
} catch (Exception e) {
} finally {
//응답 및 httpClient close
response.close();
httpClient.close();
}
return returnCode;
}
}
- 응답 테스트 testURL.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>받은 데이터</h1>
<p>보내는 ID: <%= request.getParameter("sendId") %></p>
<p>보내는 이름: <%= request.getParameter("sendName") %></p>
<p>받는 ID: <%= request.getParameter("receiveId") %></p>
<p>보내는 제목: <%= request.getParameter("sendTitle") %></p>
<p>보내는 메시지: <%= request.getParameter("sendMessage") %></p>
</body>
</html>
반응형
'JAVA' 카테고리의 다른 글
Maven 이용하여 프로젝트 내 local jar 파일 추가 방법 (0) | 2024.04.23 |
---|---|
SameSiteCookieFilter 설정하기 Springboot 1.4.2 (0) | 2024.04.01 |
String.valueOf() 와 toString() 차이 (0) | 2023.11.07 |
ubuntu 20.04 JAVA17 설치 (JDK17) (0) | 2023.06.22 |
[JMS]Activemq 메시지 소비자(Consumer) 기초 소스 (0) | 2020.07.27 |