我正在从外部API获取地址。这是表示地址的类:
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Address implements Serializable {
private static final long serialVersionUID = -7134571546367230214L;
private String street;
private int houseNumber;
private String district;
private String city;
private String state;
private String zipCode;
}
但是,当给定的地址没有houseNumber时,API将在houseNumber
字段上返回一个字符串,如"NO NUMBER"
,导致Jackson抛出反序列化错误,因为它期望的是整数,而得到的是字符串。
当Jackson找到一个字符串值时,如何告诉它将houseNumber
转换为0
?
2条答案
按热度按时间gzjq41n41#
您可以尝试在字段上使用自定义反序列化程序:
反序列化器可能如下所示:
然而,我还是会将
houseNumber
改为String
,因为现在您还不能支持“1/c”、“123 a”等数字,这些数字至少在某些国家很常见。然后,您可以不使用自定义反序列化器,而只向setter添加一些逻辑或在解析json之后应用它,即根据需要用另一个值替换“NO NUMBER”。
4nkexdtk2#
您可以提供定制的
com.fasterxml.jackson.databind.deser.DeserializationProblemHandler
,并为所有POJO
类处理所有这些类型的业务值:或者,您可以提供自定义
com.fasterxml.jackson.databind.util.StdConverter
实现,它的接口比JsonDeserializer
简单一些:在这两种情况下,程序打印: