Maison  >  Article  >  Java  >  Comment implémenter un sérialiseur personnalisé à l'aide de l'annotation @JsonSerialize en Java ?

Comment implémenter un sérialiseur personnalisé à l'aide de l'annotation @JsonSerialize en Java ?

WBOY
WBOYavant
2023-09-11 18:17:06721parcourir

L'annotation

Comment implémenter un sérialiseur personnalisé à laide de lannotation @JsonSerialize en Java ?

@JsonSerialize est utilisée pour déclarer un sérialiseur personnalisé lors de la sérialisation du champ. Nous pouvons implémenter un sérialiseur personnalisé en étendant la classe StdSeralizer. Et vous devez remplacer la méthode serialize() de la classe StdSerializer.

Syntaxe

@Target(value={ANNOTATION_TYPE,METHOD,FIELD,TYPE,PARAMETER})
@Retention(value=RUNTIME)
public @interface JsonSerialize

Dans le programme suivant, nous pouvons utiliser l'annotation @JsonSerialize pour implémenter un sérialiseur personnalisé

Exemple

import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.ser.std.*;
public class JsonSerializeAnnotationTest {
   public static void main (String[] args) throws JsonProcessingException, IOException {
      Employee emp = new Employee(115, "Adithya", new String[] {"Java", "Python", "Scala"});
      ObjectMapper mapper = new ObjectMapper();
      String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp);
      System.out.println(jsonString);
   }
}
// CustomSerializer class
class CustomSerializer extends StdSerializer {
   public CustomSerializer(Class t) {
      super(t);
   }
   public CustomSerializer() {
      this(Employee.class);
   }
   @Override
   public void serialize(Employee emp, JsonGenerator jgen, SerializerProvider sp) throws IOException, JsonGenerationException {
      StringBuilder sb = new StringBuilder();
      jgen.writeStartObject();
      jgen.writeNumberField("id", emp.getId());
      jgen.writeStringField("name", emp.getName());
      for(String s: emp.getLanguages()) {
         sb.append(s).append(";");
      }
      jgen.writeStringField("languages", sb.toString());
      jgen.writeEndObject();
   }
}
// Employee class
@JsonSerialize(using=CustomSerializer.class)<strong>
</strong>class Employee {
   private int id;
   private String name;
   private String[] languages;
   public Employee(int id, String name, String[] languages) {
      this.id = id;
      this.name = name;
      this.languages = languages;
   }
   public int getId() {
      return this.id;
   }
   public String getName() {
      return this.name;
   }
   public String[] getLanguages() {
      return this.languages;
   }
<strong>   </strong>@Override<strong>
 </strong>  public String toString() {
      StringBuilder sb = new StringBuilder("ID: ").append(this.id).append("\nName: ").append(this.name).append("\nLanguages:");
      for(String s: this.languages) {
         sb.append(" ").append(s);
      }
      return sb.toString();
   }
}

Output

{
   "id" : 115,
   "name" : "Adithya",
   "languages" : "Java;Python;Scala;"
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer