1. Spring Boot에서 GET 요청 파라미터 처리 방법
Spring Boot에서 GET 요청을 받을 때 파라미터를 선택적으로 처리하는 것이 중요합니다. 특히, Java 8 이상에서는 Optional<String>
을 활용하여 보다 안전한 처리를 할 수 있습니다.
아래는 컨트롤러에서 Optional
을 활용하는 예제입니다.
@GetMapping("/api/data")
public ResponseEntity<String> getData(@RequestParam Optional<String> conversationId) {
String convId = conversationId.orElse("default-value");
return ResponseEntity.ok("Received: " + convId);
}
위 코드에서 orElse()
를 사용하여 기본값을 설정할 수 있으며, 값이 존재할 경우 이를 사용하게 됩니다. 이를 통해 NullPointerException을 방지하고 보다 안정적인 API를 구현할 수 있습니다.
2. OkHttp3를 활용한 JSON 데이터 추출
OkHttp3는 간단하고 강력한 HTTP 클라이언트 라이브러리로, REST API 요청을 보내는 데 자주 사용됩니다. API 호출 후 JSON 응답에서 특정 데이터를 추출하는 방법을 알아보겠습니다.
2.1 OkHttp3 설정 및 요청 보내기
아래는 OkHttp3를 사용하여 GET 요청을 보내고 응답을 받는 코드입니다.
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpExample {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
System.out.println("Response: " + response.body().string());
}
}
}
}
2.2 JSON 응답에서 특정 필드 추출
API에서 다음과 같은 JSON을 반환한다고 가정해 보겠습니다.
{
"responseCode": 20000000,
"responseMsg": "Success",
"conversationId": "dfdsfehgmdkle"
}
이 데이터를 파싱하여 conversationId
값을 추출하는 방법은 아래와 같습니다.
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonParsingExample {
public static void main(String[] args) throws Exception {
String jsonData = "{\"responseCode\": 20000000, \"responseMsg\": \"Success\", \"conversationId\": \"dfdsfehgmdkle\"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(jsonData);
String conversationId = rootNode.get("conversationId").asText();
System.out.println("Extracted conversationId: " + conversationId);
}
}
위 코드에서는 Jackson의 ObjectMapper
를 활용하여 JSON을 파싱하고 원하는 필드를 추출했습니다.
3. SubmissionPublisher를 활용한 Reactive Streams
Java 9에서 도입된 SubmissionPublisher
를 활용하면 비동기 데이터 스트림을 쉽게 구현할 수 있습니다.
3.1 기본적인 SubmissionPublisher 사용법
아래는 기본적인 SubmissionPublisher
의 사용 예제입니다.
import java.util.concurrent.SubmissionPublisher;
public class PublisherExample {
public static void main(String[] args) {
SubmissionPublisher<String> publisher = new SubmissionPublisher<>();
publisher.subscribe(data -> System.out.println("Received: " + data));
publisher.submit("Hello, Reactive Streams!");
publisher.close();
}
}
여기서 close()
를 호출하지 않으면 스트림이 종료되지 않으므로 주의해야 합니다.
3.2 Spring Boot WebFlux에서 활용
Spring Boot WebFlux에서 SubmissionPublisher
를 활용하면 클라이언트가 비동기적으로 데이터를 받을 수 있습니다.
@RestController
@RequestMapping("/api")
public class ReactiveController {
@GetMapping("/stream")
public SubmissionPublisher<String> streamData() {
SubmissionPublisher<String> publisher = new SubmissionPublisher<>();
publisher.submit("Streaming Data...");
publisher.close();
return publisher;
}
}
위 방식은 기본적인 데이터 스트리밍 예제이며, 실제 서비스에서는 Flux
를 사용하는 것이 더 일반적입니다.
끝으로
Spring Boot에서 GET 요청 파라미터를 효과적으로 처리하는 방법과 OkHttp3를 활용한 API 호출 및 JSON 파싱 기법을 다루었습니다. 또한, SubmissionPublisher
를 활용하여 Reactive Streams를 구현하는 방법도 살펴보았습니다.
이러한 기법들은 실무에서 비동기 프로그래밍, REST API 연동, 실시간 데이터 처리 등에 유용하게 활용될 수 있습니다.
Comments
Post a Comment