Ce face URI
URI (Uniform Resource Identifier) reprezintă o adresă ca https://dexblog.ro/invata/java/?q=uuid#exemple. Obiectul verifică sintaxa și îți dă acces la fiecare parte: schema (https), gazda, portul, calea, interogarea și fragmentul.
URI.create(text) este varianta comodă: dacă textul nu este o adresă validă, aruncă IllegalArgumentException (neverificată). Constructorul new URI(text) face același lucru, dar aruncă URISyntaxException, pe care ești obligat s-o prinzi. Pentru adrese scrise în cod folosești create; pentru adrese primite de la utilizator, poți prinde oricare dintre excepții.
HttpClient lucrează cu URI, nu cu String. resolve combină o adresă de bază cu una relativă, ca un browser care urmează un link. Clasa veche URL are constructorii depreciați din Java 20; creezi un URL cu uri.toURL().
Parametri
| Parametru | Descriere |
|---|---|
text |
Adresa completă. Spațiile și caracterele speciale trebuie codificate (%20). |
relativ |
Pentru resolve: o cale relativă, de exemplu "../php/". |
Ce returnează
Un obiect URI imutabil.
Exemple
Exemplul 1: Părțile unei adrese
import java.net.URI;
public class Main {
public static void main(String[] args) {
URI adresa = URI.create("https://dexblog.ro:443/invata/java/?q=uuid&pagina=2#exemple");
System.out.println("Schema: " + adresa.getScheme());
System.out.println("Gazda: " + adresa.getHost());
System.out.println("Port: " + adresa.getPort());
System.out.println("Cale: " + adresa.getPath());
System.out.println("Interogare: " + adresa.getQuery());
System.out.println("Fragment: " + adresa.getFragment());
}
}
Rezultat
Schema: https
Gazda: dexblog.ro
Port: 443
Cale: /invata/java/
Interogare: q=uuid&pagina=2
Fragment: exemple
Exemplul 2: Adrese invalide
import java.net.URI;
import java.net.URISyntaxException;
public class Main {
public static void main(String[] args) {
try {
URI.create("https://dexblog.ro/căutare?q=mere și pere");
} catch (IllegalArgumentException e) {
System.out.println("create: " + e.getMessage());
}
try {
new URI("http://exemplu.ro/a b");
} catch (URISyntaxException e) {
System.out.println("constructor: " + e.getMessage());
}
}
}
Rezultat
create: Illegal character in query at index 33: https://dexblog.ro/căutare?q=mere și pere
constructor: Illegal character in path at index 19: http://exemplu.ro/a b
Exemplul 3: resolve: urmarea unui link relativ
import java.net.URI;
public class Main {
public static void main(String[] args) {
URI pagina = URI.create("https://dexblog.ro/invata/java/uuid/");
System.out.println(pagina.resolve("../random/"));
System.out.println(pagina.resolve("/invata/php/"));
System.out.println(pagina.resolve("exemple.html"));
}
}
Rezultat
https://dexblog.ro/invata/java/random/
PHP
https://dexblog.ro/invata/java/uuid/exemple.html
Greșeli frecvente
- Pui text cu spații sau diacritice direct în
URI.create. Codifică întâi valorile cuURLEncoder.encode(text, StandardCharsets.UTF_8). - Folosești
new URL("…"). Constructorii luiURLsunt depreciați; foloseșteURI.create("…").toURL().
Comenzi înrudite
URI.getHost: Returnează numele gazdei dintr-o adresă (dexblog.ro din https://dexblog.ro/invata/); null dacă adresa nu are gazdă.HttpRequest: O cerere HTTP imutabilă (adresă, metodă, antete, corp), construită cu HttpRequest.newBuilder(uri)…build().HttpClient: Clientul HTTP din Java 11: newHttpClient() îl creează, send/sendAsync trimit cereri și primesc răspunsuri.IllegalArgumentException: Excepția aruncată când o metodă primește un argument cu valoare nepermisă (vârstă negativă, lună 13).