Request bodies og headers
Send POST-data, og angiv headers
Request bodies og headers er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.
Anmodningsindhold og headere
GET-anmodninger har sjældent brug for indhold, men det har POST, PUT og PATCH. JDK's HTTP-klient bruger BodyPublisher-objekter til at levere anmodningsindhold og builder-metoder til at angive headere.
Denne lektion handler om at sende data og styre headere som Content-Type.
BodyPublishers.ofString
Den enkleste udgiver sender en brødtekst som streng. Giv den som argument til metoden POST(...) på anmodningsbuilderen.
BodyPublishers.noBody() findes til anmodninger uden indhold.
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"Ada\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/users"))
.POST(BodyPublishers.ofString(json))
.build();
System.out.println("Method: " + request.method());
}
}Angivelse af en enkelt header
Brug header(name, value) til at tilføje én header. Når du sender JSON, angiver du næsten altid Content-Type.
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/users"))
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString("{}"))
.build();
System.out.println("Has Content-Type: " +
request.headers().firstValue("Content-Type").isPresent());
}
}Flere headere på én gang
headers(name1, value1, name2, value2, ...) angiver flere headere i ét kald. Antallet af argumenter skal være lige, ellers kaster metoden IllegalArgumentException.
import java.net.URI;
import java.net.http.HttpRequest;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.headers(
"Accept", "application/json",
"Accept-Language", "en-US")
.GET()
.build();
System.out.println(request.headers().map().keySet());
}
}Autorisationsheadere
Bearer-tokens sendes via headeren Authorization. Opret værdien som en streng; log aldrig den rå token.
public class Main {
public static void main(String[] args) {
String token = "abc123";
String headerValue = "Bearer " + token;
System.out.println("Authorization: Bearer ***");
System.out.println("Length: " + headerValue.length());
}
}PUT og DELETE
Builderen har dedikerede metoder: PUT(publisher), DELETE() og den generiske method(name, publisher) til alt andet, f.eks. PATCH.
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
public class Main {
public static void main(String[] args) {
HttpRequest patch = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/users/1"))
.method("PATCH", BodyPublishers.ofString("{\"active\":true}"))
.build();
System.out.println("Method: " + patch.method());
}
}Formularenkodet indhold
For data af typen application/x-www-form-urlencoded opretter du brødtekststrengen manuelt, URL-koder hver værdi og udgiver den derefter som en streng.
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
String body = "name=" + URLEncoder.encode("Ada Lovelace", StandardCharsets.UTF_8)
+ "&role=" + URLEncoder.encode("engineer", StandardCharsets.UTF_8);
System.out.println(body);
}
}Afsendelse af en fil som brødtekst
BodyPublishers.ofFile(path) streamer en fil som anmodningens brødtekst uden at indlæse hele filen i hukommelsen — ideelt til uploads.
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/upload"))
.header("Content-Type", "application/octet-stream")
.POST(BodyPublishers.ofFile(Path.of("data.bin")))
.build();
System.out.println("Upload request built");
}
}Brødtekster som byte-arrays
Når du allerede har bytes i hukommelsen, sender BodyPublishers.ofByteArray(byte[]) dem direkte. Det er nyttigt til binære data, der oprettes under kørsel.
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
byte[] payload = "raw-bytes".getBytes(StandardCharsets.UTF_8);
// BodyPublishers.ofByteArray(payload) would wrap these bytes
System.out.println("Payload size: " + payload.length + " bytes");
}
}Begrænsede headere
Af sikkerhedshensyn forhindrer klienten dig i at angive bestemte headere som Host, Content-Length, Connection og Upgrade. Hvis du forsøger at angive dem, kaster klienten IllegalArgumentException — den administrerer dem selv.
Sådan samles det
En typisk JSON-POST kombinerer en brødtekst-udgiver med en content-type-header:
.POST(BodyPublishers.ofString(json)).header("Content-Type", "application/json")- tilføj
.header("Authorization", "Bearer ...")efter behov
Hurtigt tjek
Test din forståelse af anmodningsindhold og headere.
Opsummering
Du har lært at sende data og styre headere:
- BodyPublishers.ofString / ofByteArray / ofFile leverer anmodningsindhold.
- POST / PUT / DELETE / method(...) vælger HTTP-metoden.
- header(...) og headers(...) angiver anmodningsheadere.
- Angiv
Content-Typefor JSON- og formulardata; brugAuthorizationtil tokens. - Nogle headere (Host, Content-Length) er begrænsede og administreres af klienten.
Lær Java med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 104
- Lektioner
- 374
Ofte stillede spørgsmål
Er lektionen “Request bodies og headers” gratis?
Ja — hele teksten til “Request bodies og headers” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Request bodies og headers”?
Send POST-data, og angiv headers Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Java Academy?
Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Request bodies og headers”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Java Academy-lektion?
Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- java.net.http.HttpClient
- Asynkrone forespørgsler
- Request bodies og headers
- Håndtering af svar