Rumah > Java > javaTutorial > Apakah cara untuk menangani ralat yang dijana semasa menyahsiri JSON dalam Java?

Apakah cara untuk menangani ralat yang dijana semasa menyahsiri JSON dalam Java?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2023-09-01 12:13:06
ke hadapan
780 orang telah melayarinya

Apakah cara untuk menangani ralat yang dijana semasa menyahsiri JSON dalam Java?

Apabila anda menghadapi masalah yang mungkin boleh dipulihkan semasa proses penyahserikatan, anda boleh mendaftarkan kelas PenyahserialisasiProblemHandler #🎜🎜 untuk melaksanakannya . Kami boleh menangani ralat yang dijana semasa menyahsiri JSON dengan melaksanakan kaedah handleUnknownProperty() daripada kelas DeserializationProblemHandler .

Syntax

public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<!--?--> deserializer, Object beanOrClass, String propertyName) throws IOException
Salin selepas log masuk

Contoh

import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.*;
public class DeserializationErrorTest {
   public static void main(String[] args) throws JsonMappingException, JsonGenerationException, IOException {
      String jsonString = "{\"id\":\"101\", \"name\":\"Ravi Chandra\", \"address\":\"Pune\", \"salary\":\"40000\" }";
      <strong>ObjectMapper </strong>objectMapper = new ObjectMapper();
      DeserializationProblemHandler deserializationProblemHandler = new UnMarshallingErrorHandler();
      objectMapper.addHandler(deserializationProblemHandler);
      Customer customer = objectMapper.readValue(jsonString, Customer.class);
      System.out.println(customer);
   }
}
// UnMarshallingErrorHandler class<strong>
</strong>class UnMarshallingErrorHandler extends DeserializationProblemHandler {
   @Override
   public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser jp, JsonDeserializer deserializer, Object beanOrClass, String propertyName) throws IOException, JsonProcessingException {
      boolean result = false;
      super.handleUnknownProperty(ctxt, jp, deserializer, beanOrClass, propertyName);
      System.out.println("Property with name &#39;" + propertyName + "&#39; doesn&#39;t exist in Class of type &#39;" + beanOrClass.getClass().getName() + "&#39;");
      return true; // returns true to inform the deserialization process that we can handle the error and it can continue deserializing and returns false, if we want to stop the deserialization immediately.
   }
}
// Customer class
class Customer {
   private int id;
   private String name;
   private String address;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getAddress() {
      return address;
   }
   public void setAddress(String address) {
      this.address = address;
   }
   @Override
   public String toString() {
      return "Customer [id=" + id + ", name=" + name + ", address=" + address + "]";
   }
}
Salin selepas log masuk

Output apabila benar dikembalikan

Property with name &#39;salary&#39; doesn&#39;t exist in Class of type &#39;Customer&#39;
Customer [id=101, name=Ravi Chandra, address=Pune]
Salin selepas log masuk
#🎜 apabila dipulangkan #
Property with name &#39;salary&#39; doesn&#39;t exist in Class of type &#39;Customer&#39;
Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "salary" (class Customer), not marked as ignorable (3 known properties: "id", "address", "name"])
at [Source: (String)"{"id":"101", "name":"Ravi Chandra", "address":"Pune", "salary":"40000" }"; line: 1, column: 65] (through reference chain: Customer["salary"]) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:840)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1179)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1592) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1570) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4202)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3205)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3173)
at DeserializationErrorTest.main(DeserializationErrorTest.java:12)<strong>
</strong>
Salin selepas log masuk

Atas ialah kandungan terperinci Apakah cara untuk menangani ralat yang dijana semasa menyahsiri JSON dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Isu terkini
Dapatkan: Pindahkan data JSON
daripada 1970-01-01 08:00:00
0
0
0
ralat json penyimpanan mysql
daripada 1970-01-01 08:00:00
0
0
0
Garis miring ke belakang terdapat dalam Json
daripada 1970-01-01 08:00:00
0
0
0
php - Bagaimanakah kesombongan membalas komen json?
daripada 1970-01-01 08:00:00
0
0
0
javascript - Masalah dengan memaparkan data json
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan