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"}

Table of contents