URI în Java

O adresă (URL) verificată și împărțită în părți; URI.create("https://…") o creează și aruncă IllegalArgumentException dacă e greșită.

Sintaxă
import java.net.URI;

static URI create(String text)
URI(String text) throws URISyntaxException
URI resolve(String relativ)
URL toURL() throws MalformedURLException

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 cu URLEncoder.encode(text, StandardCharsets.UTF_8).
  • Folosești new URL("…"). Constructorii lui URL sunt depreciați; folosește URI.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).