Rumah > Java > javaTutorial > teks badan

Bagaimana untuk melaksanakan deserializer tersuai menggunakan anotasi @JsonDeserialize di Jawa?

王林
Lepaskan: 2023-08-25 19:29:05
ke hadapan
1299 orang telah melayarinya

Bagaimana untuk melaksanakan deserializer tersuai menggunakan anotasi @JsonDeserialize di Jawa?

@JsonDeserialize anotasi digunakan untuk mengisytiharkan penyahserialisasi tersuai apabila menyahsiri JSON ke dalam objek Java. Kami boleh melaksanakan deserializer tersuai dengan melanjutkan kelas StdDeserializer menggunakan jenis generik Pekerja, dan perlu mengatasi kaedah deserialize() kelas StdDeserializer .

Syntax

@Target(value={ANNOTATION_TYPE,METHOD,FIELD,TYPE,PARAMETER})
@Retention(value=RUNTIME)
public @interface JsonDeserialize
Salin selepas log masuk

Dalam program berikut, kita boleh menggunakan @JsonDeserialize anotasi untuk melaksanakan deserializer tersuai

Contoh

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();
   }
}
Salin selepas log masuk

Output

ID: 115
Name: Adithya
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan deserializer tersuai menggunakan anotasi @JsonDeserialize di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan