Heim  >  Artikel  >  Java  >  Wie implementiert man einen benutzerdefinierten Serialisierer mithilfe der Annotation @JsonSerialize in Java?

Wie implementiert man einen benutzerdefinierten Serialisierer mithilfe der Annotation @JsonSerialize in Java?

WBOY
WBOYnach vorne
2023-09-11 18:17:06721Durchsuche

Die

Wie implementiert man einen benutzerdefinierten Serialisierer mithilfe der Annotation @JsonSerialize in Java?

@JsonSerialize-Annotation wird verwendet, um während der Feldserialisierung einen benutzerdefinierten Serialisierer zu deklarieren. Wir können einen benutzerdefinierten Serializer implementieren, indem wir die Klasse StdSeralizer erweitern. Und Sie müssen die Methode serialize() der Klasse StdSerializer überschreiben.

Syntax

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

Im folgenden Programm können wir die Annotation @JsonSerialize verwenden, um einen benutzerdefinierten Serialisierer zu implementieren

Beispiel

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();
   }
}

Ausgabe

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

Das obige ist der detaillierte Inhalt vonWie implementiert man einen benutzerdefinierten Serialisierer mithilfe der Annotation @JsonSerialize in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen