728x90
Java에서 REST API 호출을 위한 GET 및 POST 방식을 지원하고, 파라미터를 JSON 형태로 넘길 수 있는 함수
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpHeaders;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import java.time.Duration;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper; // Jackson 라이브러리 사용
public class RestApiClient {
private static final HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
// GET과 POST 메소드를 지원하는 함수
public static String sendRequest(String url, String method, Map<String, Object> params) throws Exception {
// JSON 변환을 위한 ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
String jsonParams = objectMapper.writeValueAsString(params);
HttpRequest request;
// GET 요청 처리
if ("GET".equalsIgnoreCase(method)) {
URI uri = new URI(url + "?" + getParamsString(params));
request = HttpRequest.newBuilder()
.uri(uri)
.GET()
.timeout(Duration.ofSeconds(10))
.header("Content-Type", "application/json")
.build();
}
// POST 요청 처리
else if ("POST".equalsIgnoreCase(method)) {
request = HttpRequest.newBuilder()
.uri(URI.create(url))
.POST(BodyPublishers.ofString(jsonParams))
.timeout(Duration.ofSeconds(10))
.header("Content-Type", "application/json")
.build();
} else {
throw new IllegalArgumentException("Unsupported HTTP method: " + method);
}
// 서버로 요청 전송
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
// 상태 코드와 응답 본문 반환
if (response.statusCode() == 200) {
return response.body();
} else {
throw new Exception("HTTP error: " + response.statusCode() + " - " + response.body());
}
}
// GET 요청 시, 파라미터를 URL 쿼리스트링으로 변환하는 함수
private static String getParamsString(Map<String, Object> params) {
StringBuilder result = new StringBuilder();
for (Map.Entry<String, Object> entry : params.entrySet()) {
result.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
String resultString = result.toString();
return resultString.length() > 0 ? resultString.substring(0, resultString.length() - 1) : resultString;
}
public static void main(String[] args) {
try {
// 예시 GET 요청
String getResponse = sendRequest("https://api.example.com/getData", "GET", Map.of("param1", "value1", "param2", "value2"));
System.out.println("GET Response: " + getResponse);
// 예시 POST 요청
String postResponse = sendRequest("https://api.example.com/postData", "POST", Map.of("param1", "value1", "param2", "value2"));
System.out.println("POST Response: " + postResponse);
} catch (Exception e) {
e.printStackTrace();
}
}
}
주요 설명
- HttpClient: Java 11에 도입된 새로운 HTTP 클라이언트로, 비동기 및 동기 방식의 HTTP 요청을 지원합니다.
- GET 및 POST 방식 선택: 요청 방식을 GET 또는 POST로 선택할 수 있으며, 그에 따라 요청을 다르게 처리합니다.
- JSON 파라미터 전송: Jackson 라이브러리를 사용해 Map<String, Object> 형태의 파라미터를 JSON 문자열로 변환하여 전송합니다.
- 타임아웃 설정: 각 요청에 대해 타임아웃을 10초로 설정하였습니다.
의존성 (Jackson)
이 코드를 실행하려면 Jackson 라이브러리를 추가해야 합니다. Maven 프로젝트일 경우 pom.xml에 아래와 같은 의존성을 추가합니다
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
LIST
'Develop > JAVA' 카테고리의 다른 글
[Java] 현재 서버 도메인 정보 갖고오기 (13) | 2024.09.26 |
---|---|
[Java] spring security 설정 csrf 특정 url 예외 처리 (6) | 2024.09.26 |
[Java] forEach 와 Stream API를 사용한 배열 처리 (9) | 2024.09.24 |
[Spring Framework] Spring boot 2개 실행했을 때 로그인 세션 끊기는 현상 해결하기 (8) | 2024.09.14 |
[JAVA] dto model 특정값 중복 제거 합치기 stream filter distinct sort (11) | 2024.09.10 |