Generarea șirurilor complexe de text (interogări SQL, payload-uri JSON, bucăți de HTML/XML) a fost istoric una dintre cele mai neplăcute sarcini în Java: concatenările cu operatorul + produceau cod ilizibil, plin de caractere de escape (\") și predispus la erori de securitate prin injectare.
Java modern rezolvă definitiv aceste probleme prin două facilități complementare: Blocurile de Text (Text Blocks) și Șabloanele de Șiruri (String Templates).
// Blocurile de text încep și se termină cu trei ghilimele:
// Păstrează indentarea relativă și elimină complet nevoia de escape pentru ghilimele:
String jsonPayload = """
{
"id": 1042,
"utilizator": "Dexter",
"status": "ACTIV",
"permisiuni": ["ADMIN", "BILLING"]
}
""";
String sqlQuery = """
SELECT u.id, u.nume, c.total
FROM utilizatori u
INNER JOIN comenzi c ON u.id = c.utilizator_id
WHERE c.data_creare >= NOW() - INTERVAL '30 days'
ORDER BY c.total DESC;
""";
Interpolare Sigură cu String Templates și Procesorul STR
Spre deosebire de interpolarea naivă din alte limbaje (cum ar fi f"..." din Python), mecanismul String Templates din Java combină textul literal cu expresiile evaluate prin intermediul unui procesor de șabloane (Template Processor), validând rezultatul înainte de generare:
String nume = "Alice";
double pret = 199.99;
int cantitate = 3;
// Procesorul standard STR interpolează expresii plasate între \{...}:
String factura = STR."""
FACTURA FISCALA
Client: \{nume.toUpperCase()}
Produs: Curs Java 21
Total de plată: \{pret * cantitate} RON
""";
System.out.println(factura);
Prevenirea Atacurilor de tip SQL Injection
Datorită arhitecturii flexibile a procesoarelor de șabloane, pot fi create procesoare personalizate care sanitizează automat intrările (de exemplu un procesor SQL care returnează un PreparedStatement cu parametri bindați în siguranță, eliminând riscul de injectare SQL).