Alternative moderne: JSON e Protocol Buffers
Sostituisca la serializzazione Java con Jackson JSON e Protocol Buffers per una persistenza portabile e sicura.
Alternative moderne: JSON e Protocol Buffers è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
Perché sostituire la serializzazione Java?
La serializzazione Java è limitata alla JVM, verbosa, lenta e rischiosa per la sicurezza. Le applicazioni moderne preferiscono JSON, leggibile dalle persone e indipendente dal linguaggio, oppure Protocol Buffers, compatti, veloci e basati su uno schema.
Jackson: la libreria JSON di fatto
ObjectMapper di Jackson converte gli oggetti in stringhe JSON e viceversa. Aggiunga com.fasterxml.jackson.core:jackson-databind al progetto.
ObjectMapper mapper = new ObjectMapper();
User user = new User("Alice", 30);
String json = mapper.writeValueAsString(user);
System.out.println(json); // {"name":"Alice","age":30}
User restored = mapper.readValue(json, User.class);Personalizzazione di Jackson con le annotazioni
Utilizzi @JsonProperty, @JsonIgnore, @JsonAlias e @JsonFormat per controllare la serializzazione senza modificare i nomi dei campi nel modello.
public class Product {
@JsonProperty("product_name")
private String name;
@JsonIgnore
private String internalCode;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate releaseDate;
}Moduli Jackson: supporto per Java Time
Registri JavaTimeModule per serializzare correttamente LocalDate, LocalDateTime e Instant, invece di ottenere un oggetto JSON pieno di campi.
ObjectMapper mapper = new ObjectMapper()
.registerModule(new JavaTimeModule())
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String json = mapper.writeValueAsString(LocalDate.now());
System.out.println(json); // "2024-06-15"GSON come alternativa leggera
GSON di Google è più semplice di Jackson: per i tipi di base non richiede configurazione, ma su larga scala offre meno annotazioni e prestazioni inferiori rispetto a Jackson.
Gson gson = new Gson();
String json = gson.toJson(new User("Bob", 25));
User user = gson.fromJson(json, User.class);Che cosa sono i Protocol Buffers?
Protocol Buffers (Protobuf) è il formato binario di serializzazione di Google. Si definisce uno schema .proto, lo si compila in classi Java e si ottengono messaggi compatti con gestione delle versioni integrata.
// user.proto
syntax = "proto3";
message UserProto {
string name = 1;
int32 age = 2;
}Codifica di un messaggio Protobuf
Le classi generate dispongono di un'API builder. Chiami toByteArray() per ottenere il payload binario e parseFrom(bytes) per decodificarlo.
UserProto user = UserProto.newBuilder()
.setName("Alice")
.setAge(30)
.build();
byte[] bytes = user.toByteArray();
UserProto restored = UserProto.parseFrom(bytes);
System.out.println(restored.getName());Compromessi tra JSON e Protobuf
JSON è leggibile dalle persone e privo di schema; Protobuf è da 3 a 10 volte più compatto e veloce, ma richiede uno schema e la generazione del codice. Scelga JSON per le API REST e Protobuf per i servizi interni ad alto throughput.
Evoluzione dello schema con Protobuf
I campi Protobuf sono numerati, non denominati. È possibile aggiungere in sicurezza nuovi campi o dichiarare obsoleti quelli precedenti senza interrompere i client esistenti, purché non si riutilizzino mai i numeri dei campi.
// v2 of user.proto — backwards compatible
message UserProto {
string name = 1;
int32 age = 2;
string email = 3; // new in v2
}Migrazione dalla serializzazione Java
Sostituisca i percorsi di scrittura con ObjectOutputStream con ObjectMapper.writeValue() o Protobuf writeTo(). Mantenga la vecchia serializzazione solo per la migrazione dei dati legacy.
Sicurezza: nessun gadget di deserializzazione
JSON e Protobuf non chiamano costruttori o metodi arbitrari durante la deserializzazione, eliminando gli attacchi tramite gadget chain che affliggono la serializzazione Java.
Verifica rapida
Qual è un vantaggio fondamentale dei Protocol Buffers rispetto a JSON?
Riepilogo
Sostituisca la serializzazione Java con JSON e Jackson per le API REST o la leggibilità, oppure con Protocol Buffers per i servizi in cui le prestazioni sono fondamentali. Entrambi sono compatibili tra linguaggi, supportano l'evoluzione dello schema e sono sicuri per progettazione.
Domande Frequenti
La lezione «Alternative moderne: JSON e Protocol Buffers» è gratuita?
Sì — il testo completo di «Alternative moderne: JSON e Protocol Buffers» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «Alternative moderne: JSON e Protocol Buffers»?
Sostituisca la serializzazione Java con Jackson JSON e Protocol Buffers per una persistenza portabile e sicura. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Alternative moderne: JSON e Protocol Buffers»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Nozioni di base sulla serializzazione Java
- Campi transient e serialVersionUID
- Serializzazione personalizzata: writeObject e readObject
- Alternative moderne: JSON e Protocol Buffers