java 24 lines · 6 steps

Posting an order with Java's HttpClient

Serialize an order, POST it over HTTP, branch on the status code, and deserialize the reply.

Explained by highlit
1public OrderConfirmation submitOrder(Order order) throws IOException, InterruptedException {
2 String payload = objectMapper.writeValueAsString(order);
3 
4 HttpRequest request = HttpRequest.newBuilder()
5 .uri(URI.create(baseUrl + "/api/v1/orders"))
6 .timeout(Duration.ofSeconds(10))
7 .header("Content-Type", "application/json")
8 .header("Accept", "application/json")
9 .header("Authorization", "Bearer " + apiToken)
10 .POST(HttpRequest.BodyPublishers.ofString(payload, StandardCharsets.UTF_8))
11 .build();
12 
13 HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
14 
15 int status = response.statusCode();
16 if (status == 429) {
17 throw new RateLimitedException(response.headers().firstValue("Retry-After").orElse("5"));
18 }
19 if (status >= 400) {
20 throw new OrderApiException("Order submission failed with status " + status + ": " + response.body());
21 }
22 
23 return objectMapper.readValue(response.body(), OrderConfirmation.class);
24}
01 / 01
STEP 01

Walkthrough

Space play step click any line
Three takeaways
  1. 1Jackson's ObjectMapper bookends the request: one call to serialize outbound, one to deserialize the response.
  2. 2Inspecting the status code before parsing lets you fail fast with meaningful exceptions instead of a broken body.
  3. 3The builder pattern on HttpRequest makes headers, timeout, and body read as a single declarative description of the call.

Related explainers

Share this explainer

Here's the card — post it anywhere.

Posting an order with Java's HttpClient — share card
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code