Language/Java
[springboot] HTTP 요청 (REST API) 참고용
도토리즈
2023. 7. 10. 23:35
python으로 겁나 간단하게 requests 사용해서 http요청 하다가 스프링으로 할라니까
살..짝 ^^ (사실 많이) 헷갈려서 참고용으로 포스팅
-- 사용예정 : Spring RestTemplate
1. map 사용 (고정값)
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
public class HttpClientExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
// Request 헤더 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// Request body 데이터 설정
MultiValueMap<String, Object> requestBody = new LinkedMultiValueMap<>();
requestBody.add("key", "value");
MultiValueMap<String, Object> requestBody2 = new LinkedMultiValueMap<>();
requestBody2.add("key1", value1);
requestBody2.add("key2", value2);
requestBody2.add("key3", value3);
requestBody.add("requestBody2", requestBody2);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
// API 엔드포인트 URL
String url = "http://127.0.0.0:1111/요청할 주소";
// POST 요청 보내기
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
// HTTP 응답 코드 확인
int responseCode = response.getStatusCodeValue();
System.out.println("Response Code: " + responseCode);
// HTTP 응답 본문 읽기
String responseBody = response.getBody();
System.out.println("Response: " + responseBody);
}
}
2. 클래스 생성하여 사용 (고정값)
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
public class HttpClientExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
// Request 헤더 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// Request body 데이터 설정
ObjectMapper objectMapper = new ObjectMapper();
String requestBody;
try {
Data requestData = new Data();
requestData.setKey("value");
Data2 requestData2 = new Data2();
requestData2.setKey1(value1);
requestData2.setKey2(value2);
requestData2.setKey3(value3);
requestData.setData2(requestData2);
requestBody = objectMapper.writeValueAsString(requestData);
} catch (JsonProcessingException e) {
e.printStackTrace();
return;
}
HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, headers);
// API 엔드포인트 URL
String url = "http://127.0.0.0:1111/요청할 주소";
// POST 요청 보내기
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
// HTTP 응답 코드 확인
int responseCode = response.getStatusCodeValue();
System.out.println("Response Code: " + responseCode);
// HTTP 응답 본문 읽기
String responseBody = response.getBody();
System.out.println("Response: " + responseBody);
}
여기서 Data 클래스와 Data2 클래스는 따로 생성하고 lombok을 이용해서 getter ,setter 생성해줘야함
3. api로 전달받는 데이터 사용
여기선 내가 참고해야 할 데이터 그대로 사용함 !
@PostMapping("/my-api")
public ResponseEntity<String> myApiMethod(@RequestBody MyRequestData requestData) {
// Request 헤더 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// Request body 데이터 설정
MultiValueMap<String, Object> requestBody = new LinkedMultiValueMap<>();
requestBody.add("table_name", requestData.getTableName());
MultiValueMap<String, Object> partition = new LinkedMultiValueMap<>();
partition.add("year", requestData.getPartition().getYear());
partition.add("month", requestData.getPartition().getMonth());
partition.add("day", requestData.getPartition().getDay());
requestBody.add("partition", partition);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
// API 엔드포인트 URL
String url = "http://127.0.0.0:1111/요청할 주소";
// POST 요청 보내기
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
// HTTP 응답 반환
return response;
}
-- MyRequestData Class
@Data
public class MyRequestData {
private String table_name;
private Partition partition;
}
-- Partition Class
@Data
public static class Partition {
private int year;
private int month;
private int day;
}
응답 반환 전에 꼭 status 코드 체크 하기 !
-- 기타 라이브러리
① OkHttp
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import java.io.IOException;
public class HttpClientExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// Request body 데이터 설정
String requestBody = "{"key":"value", "key2":"value2" , "key3" :"value3" }";
RequestBody requestEntity = RequestBody.create(MediaType.parse("application/json"), requestBody);
// Request 생성
Request request = new Request.Builder()
.url("http://127.0.0.0:1111/요청할 주소")
.post(requestEntity)
.build();
try (Response response = client.newCall(request).execute()) {
// HTTP 응답 코드 확인
int responseCode = response.code();
System.out.println("Response Code: " + responseCode);
// HTTP 응답 본문 읽기
String responseBody = response.body().string();
System.out.println("Response: " + responseBody);
} catch (IOException e) {
e.printStackTrace();
}
}
}
② Apache HttpClient
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class HttpClientExample {
public static void main(String[] args) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://127.0.0.1:1111/output/getOutput");
// Request body 데이터 설정
String requestBody = "{\"key\":\"value\",\"key2\":\"value2\",\"key3\":\"value3\"}";
StringEntity requestEntity = new StringEntity(requestBody, ContentType.APPLICATION_JSON);
httpPost.setEntity(requestEntity);
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
// HTTP 응답 코드 확인
int responseCode = response.getStatusLine().getStatusCode();
System.out.println("Response Code: " + responseCode);
// HTTP 응답 본문 읽기
HttpEntity responseEntity = response.getEntity();
String responseBody = EntityUtils.toString(responseEntity);
EntityUtils.consume(responseEntity);
// HTTP 응답 출력
System.out.println("Response: " + responseBody);
} catch (IOException e) {
e.printStackTrace();
}
}
}