Die
@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.
@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
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(); } }
{ "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!