当在反序列化过程中遇到可能可恢复的问题时,可以注册DeserializationProblemHandler 类来进行调用。我们可以通过实现DeserializationProblemHandler 类的handleUnkNownproperty()方法来处理在反序列化JSON时生成的错误。
public boolean handleUnkNownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer deserializer, Object beanorClass, String propertyName) throws IOExceptionExample
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\" }";
ObjectMapper objectMapper = new ObjectMapper();
DeserializationProblemHandler deserializationProblemHandler = new UnMarshallingErrorHandler();
objectMapper.addHandler(deserializationProblemHandler);
Customer customer = objectMapper.readValue(jsonString, Customer.class);
System.out.println(customer);
}
}
// UnMarshallingErrorHandler class
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 '" + propertyName + "' doesn't exist in Class of type '" + beanorClass.getClass().getName() + "'");
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 + "]";
}
}
当返回true时的输出
Property with name 'salary' doesn't exist in Class of type 'Customer'
Customer [id=101, name=ravi Chandra, address=Pune]
当返回false时的输出
Property with name 'salary' doesn't exist in Class of type 'Customer'
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)
以上就是在Java中处理反序列化JSON时生成的错误的方法是什么?的详细内容,更多请关注编程之家其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。