1.- XML-JACKSON
Exercici 1: Serialització d’un objecte Java a XML
Crea una classe Persona
amb els camps nom
i edat
. Serialitza un objecte d’aquesta classe a una cadena XML utilitzant Jackson.
Solució:
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class Exercici1 {
public static void main(String[] args) {
try {
// Crear l'objecte XmlMapper
XmlMapper xmlMapper = new XmlMapper();
// Crear una instància de Persona
Persona persona = new Persona("Jaume", 35);
// Serialitzar l'objecte a una cadena XML
String xmlResultat = xmlMapper.writeValueAsString(persona);
// Imprimir el resultat XML
System.out.println("Resultat XML: " + xmlResultat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Persona
class Persona {
private String nom;
private int edat;
public Persona(String nom, int edat) {
this.nom = nom;
this.edat = edat;
}
// Getters i setters
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public int getEdat() {
return edat;
}
public void setEdat(int edat) {
this.edat = edat;
}
}
Sortida esperada:
<Persona>
<nom>Jaume</nom>
<edat>35</edat>
</Persona>
Exercici 2: Deserialització d’un XML a un objecte Java
A partir d’una cadena XML que conté les dades d’una persona (nom
i edat
), converteix aquesta cadena en un objecte Java de la classe Persona
.
Solució:
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class Exercici2 {
public static void main(String[] args) {
try {
// Crear l'objecte XmlMapper
XmlMapper xmlMapper = new XmlMapper();
// Cadena XML d'entrada
String xmlString = "<Persona><nom>Anna</nom><edat>28</edat></Persona>";
// Deserialitzar la cadena XML a un objecte Persona
Persona persona = xmlMapper.readValue(xmlString, Persona.class);
// Imprimir el resultat
System.out.println("Nom: " + persona.getNom());
System.out.println("Edat: " + persona.getEdat());
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Persona (igual que l'Exercici 1)
Sortida esperada:
Nom: Anna
Edat: 28
Exercici 3: Utilitzant @JacksonXmlProperty per personalitzar noms de propietats en XML
Crea una classe Producte
amb els camps id
i nom
. Serialitza un objecte d’aquesta classe canviant el nom dels camps en l’XML a Identificador
i Nom_Producte
utilitzant @JacksonXmlProperty
.
Solució:
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
public class Exercici3 {
public static void main(String[] args) {
try {
XmlMapper xmlMapper = new XmlMapper();
// Crear una instància de Producte
Producte producte = new Producte("123", "Ordinador");
// Serialitzar l'objecte a una cadena XML
String xmlResultat = xmlMapper.writeValueAsString(producte);
// Imprimir el resultat XML
System.out.println("Resultat XML: " + xmlResultat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Producte
class Producte {
@JacksonXmlProperty(localName = "Identificador")
private String id;
@JacksonXmlProperty(localName = "Nom_Producte")
private String nom;
public Producte(String id, String nom) {
this.id = id;
this.nom = nom;
}
// Getters i setters
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
}
Sortida esperada:
<Producte>
<Identificador>123</Identificador>
<Nom_Producte>Ordinador</Nom_Producte>
</Producte>
Exercici 4: Ignorant propietats amb @JacksonXmlProperty(isAttribute = true)
Crea una classe Producte
amb un camp id
que es mapegi com a atribut en l’XML i un camp nom
que es representi com un subelement.
Solució:
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
public class Exercici4 {
public static void main(String[] args) {
try {
XmlMapper xmlMapper = new XmlMapper();
// Crear una instància de Producte
Producte producte = new Producte("123", "Ordinador");
// Serialitzar l'objecte a una cadena XML
String xmlResultat = xmlMapper.writeValueAsString(producte);
// Imprimir el resultat XML
System.out.println("Resultat XML: " + xmlResultat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Producte
class Producte {
@JacksonXmlProperty(isAttribute = true)
private String id;
@JacksonXmlProperty(localName = "Nom_Producte")
private String nom;
public Producte(String id, String nom) {
this.id = id;
this.nom = nom;
}
// Getters i setters
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
}
Sortida esperada:
<Producte id="123">
<Nom_Producte>Ordinador</Nom_Producte>
</Producte>
Exercici 5: Utilitzant @JacksonXmlElementWrapper per gestionar col·leccions
Crea una classe Classe
que continga una llista d’objectes Alumne
. Cada Alumne
ha de tenir un nom
i una edat
. Serialitza un objecte Classe
on la llista d’alumnes estigui encapsulada dins d’un element <alumnes>
.
Solució:
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import java.util.List;
import java.util.ArrayList;
public class Exercici5 {
public static void main(String[] args) {
try {
XmlMapper xmlMapper = new XmlMapper();
// Crear alumnes
Alumne alumne1 = new Alumne("Anna", 22);
Alumne alumne2 = new Alumne("Marc", 23);
List<Alumne> alumnes = new ArrayList<>();
alumnes.add(alumne1);
alumnes.add(alumne2);
// Crear una instància de Classe
Classe classe = new Classe(alumnes);
// Serialitzar l'objecte a una cadena XML
String xmlResultat = xmlMapper.writeValueAsString(classe);
// Imprimir el resultat XML
System.out.println("Resultat XML: " + xmlResultat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Alumne
class Alumne {
private String nom;
private int edat;
public Alum
ne(String nom, int edat) {
this.nom = nom;
this.edat = edat;
}
// Getters i setters
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public int getEdat() {
return edat;
}
public void setEdat(int edat) {
this.edat = edat;
}
}
// Classe Classe
class Classe {
@JacksonXmlElementWrapper(localName = "alumnes")
@JacksonXmlProperty(localName = "alumne")
private List<Alumne> alumnes;
public Classe(List<Alumne> alumnes) {
this.alumnes = alumnes;
}
// Getters i setters
public List<Alumne> getAlumnes() {
return alumnes;
}
public void setAlumnes(List<Alumne> alumnes) {
this.alumnes = alumnes;
}
}
Sortida esperada:
<Classe>
<alumnes>
<alumne>
<nom>Anna</nom>
<edat>22</edat>
</alumne>
<alumne>
<nom>Marc</nom>
<edat>23</edat>
</alumne>
</alumnes>
</Classe>
2.- JSON-JACKSON
Exercici 1: Serialització bàsica d’un objecte Java a JSON
Crea una classe Persona
amb els camps nom
i edat
. Serialitza un objecte d’aquesta classe a una cadena JSON utilitzant Jackson.
Solució:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Exercici1 {
public static void main(String[] args) {
try {
// Crear l'objecte ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
// Crear una instància de Persona
Persona persona = new Persona("Jaume", 35);
// Serialitzar l'objecte a una cadena JSON
String jsonResultat = objectMapper.writeValueAsString(persona);
// Imprimir el resultat JSON
System.out.println("Resultat JSON: " + jsonResultat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Persona
class Persona {
private String nom;
private int edat;
public Persona(String nom, int edat) {
this.nom = nom;
this.edat = edat;
}
// Getters i setters
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public int getEdat() {
return edat;
}
public void setEdat(int edat) {
this.edat = edat;
}
}
Sortida esperada:
Resultat JSON: {"nom":"Jaume","edat":35}
Exercici 2: Deserialització d’un JSON a un objecte Java
A partir d’una cadena JSON que conté les dades d’una persona (nom
i edat
), converteix aquesta cadena en un objecte Java de la classe Persona
.
Solució:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Exercici2 {
public static void main(String[] args) {
try {
// Crear l'objecte ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
// Cadena JSON d'entrada
String jsonString = "{\"nom\":\"Anna\",\"edat\":28}";
// Deserialitzar la cadena JSON a un objecte Persona
Persona persona = objectMapper.readValue(jsonString, Persona.class);
// Imprimir el resultat
System.out.println("Nom: " + persona.getNom());
System.out.println("Edat: " + persona.getEdat());
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Persona (igual que l'Exercici 1)
Sortida esperada:
Nom: Anna
Edat: 28
Exercici 3: Utilitzant @JsonProperty per canviar els noms de les propietats
Crea una classe Producte
amb els camps nom
i preu
. Serialitza un objecte de la classe canviant el nom dels camps en el JSON a nom_producte
i preu_producte
utilitzant @JsonProperty
.
Solució:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Exercici3 {
public static void main(String[] args) {
try {
ObjectMapper objectMapper = new ObjectMapper();
// Crear una instància de Producte
Producte producte = new Producte("Ordinador", 1000.0);
// Serialitzar l'objecte a una cadena JSON
String jsonResultat = objectMapper.writeValueAsString(producte);
// Imprimir el resultat JSON
System.out.println("Resultat JSON: " + jsonResultat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Producte
class Producte {
@JsonProperty("nom_producte")
private String nom;
@JsonProperty("preu_producte")
private double preu;
public Producte(String nom, double preu) {
this.nom = nom;
this.preu = preu;
}
// Getters i setters
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public double getPreu() {
return preu;
}
public void setPreu(double preu) {
this.preu = preu;
}
}
Sortida esperada:
Resultat JSON: {"nom_producte":"Ordinador","preu_producte":1000.0}
Exercici 4: Ignorant propietats amb @JsonIgnore
Crea una classe Usuari
amb els camps nom
, contrasenya
i email
. Utilitza @JsonIgnore
per impedir que la contrasenya es serialitzi.
Solució:
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Exercici4 {
public static void main(String[] args) {
try {
ObjectMapper objectMapper = new ObjectMapper();
// Crear una instància de Usuari
Usuari usuari = new Usuari("Maria", "password123", "maria@example.com");
// Serialitzar l'objecte a una cadena JSON
String jsonResultat = objectMapper.writeValueAsString(usuari);
// Imprimir el resultat JSON
System.out.println("Resultat JSON: " + jsonResultat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Usuari
class Usuari {
private String nom;
@JsonIgnore // Ignora el camp contrasenya durant la serialització
private String contrasenya;
private String email;
public Usuari(String nom, String contrasenya, String email) {
this.nom = nom;
this.contrasenya = contrasenya;
this.email = email;
}
// Getters i setters
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getContrasenya() {
return contrasenya;
}
public void setContrasenya(String contrasenya) {
this.contrasenya = contrasenya;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Sortida esperada:
Resultat JSON: {"nom":"Maria","email":"maria@example.com"}
Exercici 5: Controlant la inclusió de camps amb @JsonInclude
Crea una classe Client
amb els camps nom
, adreça
(pot ser null
) i comandes
(una llista buida per defecte). Serialitza un objecte d’aquesta classe de manera que només s’incloguin els camps que no són null
o buits.
Solució:
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
public class Exercici5 {
public static void main(String[] args) {
try {
ObjectMapper objectMapper = new ObjectMapper();
// Crear una instància de Client amb camps per defecte
Client client = new Client("Carlos", null, new ArrayList<>());
// Serialitzar l'objecte a una cadena JSON
String jsonResultat = objectMapper.writeValueAsString(client);
// Imprimir el resultat JSON
System.out.println("Resultat JSON: " + jsonResultat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Classe Client
class Client {
private String nom;
@JsonInclude(JsonInclude.Include.NON_NULL) // Exclou si és null
private String adreca;
@JsonInclude(JsonInclude.Include.NON_EMPTY) // Exclou si la llista està buida
private List<String> comandes;
public Client(String nom, String adreca, List<String> comandes) {
this.nom = nom;
this.adre
ca = adreca;
this.comandes = comandes;
}
// Getters i setters
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getAdreca() {
return adreca;
}
public void setAdreca(String adreca) {
this.adreca = adreca;
}
public List<String> getComandes() {
return comandes;
}
public void setComandes(List<String> comandes) {
this.comandes = comandes;
}
}
Sortida esperada:
Resultat JSON: {"nom":"Carlos"}