Heim > Java > javaLernprogramm > Wie implementiert man einen benutzerdefinierten Deserialisierer mithilfe der Annotation @JsonDeserialize in Java?

Wie implementiert man einen benutzerdefinierten Deserialisierer mithilfe der Annotation @JsonDeserialize in Java?

王林
Freigeben: 2023-08-25 19:29:05
nach vorne
1309 Leute haben es durchsucht

Die Annotation

Wie implementiert man einen benutzerdefinierten Deserialisierer mithilfe der Annotation @JsonDeserialize in Java?

@JsonDeserialize wird verwendet, um einen benutzerdefinierten Deserialisierer zu deklarieren, wenn JSON in Java-Objekte deserialisiert wird. Wir können einen benutzerdefinierten Deserializer implementieren, indem wir die Klasse StdDeserializer mit dem generischen Typ Employee erweitern und müssen die Methode deserialize() der Klasse StdDeserializer überschreiben.

Syntax

@Target(value={ANNOTATION_TYPE,METHOD,FIELD,TYPE,PARAMETER})
@Retention(value=RUNTIME)
public @interface JsonDeserialize
Nach dem Login kopieren

Im folgenden Programm können wir die Annotation @JsonDeserialize verwenden, um einen benutzerdefinierten Deserialisierer 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.deser.std.*;
public class JsonDeSerializeAnnotationTest {
   public static void main (String[] args) throws JsonProcessingException, IOException {
      Employee emp = new Employee(115, "Adithya");
      ObjectMapper mapper = new ObjectMapper();
      String jsonString = mapper.writeValueAsString(emp);
      emp = mapper.readValue(jsonString, Employee.class);
      System.out.println(emp);
   }
}
// CustomDeserializer class
class CustomDeserializer extends StdDeserializer<Employee> {
   public CustomDeserializer(Class<Employee> t) {
      super(t);
   }
   public CustomDeserializer() {
      this(Employee.class);
   }
   @Override
   public Employee deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
      int id = 0;
      String name = null;
      JsonToken currentToken = null;
      while((currentToken = jp.nextValue()) != null) {
         switch(currentToken) {
            case VALUE_NUMBER_INT:
            if(jp.getCurrentName().equals("id")) {
               id = jp.getIntValue();
            }
            break;
            case VALUE_STRING:
            switch(jp.getCurrentName()) {
               case "name":
               name = jp.getText();
               break;
               default:
               break;
            }
            break;
            default:
            break;
         }
      }
      return new Employee(id, name);
   }
}
// Employee class
@JsonDeserialize(using=CustomDeserializer.class)<strong>
</strong>class Employee {
   private int id;
   private String name;
   public Employee(int id, String name) {
      this.id = id;
      this.name = name;
   }
   public int getId() {
      return id;
   }
   public String getName() {
      return name;
   }
   @Override
   public String toString() {
      StringBuilder sb = new StringBuilder("ID: ").append(this.id).append("\nName: ").append(this.name);
      return sb.toString();
   }
}
Nach dem Login kopieren

Ausgabe

ID: 115
Name: Adithya
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage