使用jackson wtih java将json字符串转换为pojo时如何处理空值或空值
下面是我正在使用jackson转换为pojo的json响应-使用jackson wtih java将json字符串转换为pojo时如何处理空值或空值,java,json,jackson,Java,Json,Jackson,下面是我正在使用jackson转换为pojo的json响应- { paymentType": [ { "Monthly": ["Monthly", "Monthly"], "Prepaid": ["Prepaid", "Prepaid"] }, "" ] } 代码: String rspString = "{\"paymentType\": [{\"Monthly\": [\"Mon
{
paymentType": [
{
"Monthly": ["Monthly", "Monthly"],
"Prepaid": ["Prepaid", "Prepaid"]
},
""
]
}
代码:
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]},\"\"]}";
JsonUtil jsonUtil = new JsonUtil();
PaymentTypeResponse PaymentTypeRsp = new PaymentTypeResponse();
PaymentTypeRsp = (PaymentTypeResponse) jsonUtil.Json2Object(rspString, PaymentTypeRsp);
System.out.println(PaymentTypeRsp.getPaymentType().size());
我得到以下例外情况:
线程“main”中出现异常
com.fasterxml.jackson.databind.JsonMappingException:无法
实例化类型[简单类型,类]的值
com.test.sample.PaymentTypeResponse]来自字符串值(“”);不
单字符串构造函数/工厂方法
响应中有一个空白值,如何在转换为pojo时处理这些值
同样的,如果null存在,如何处理这种情况
任何指示都将不胜感激
提前谢谢
下面是课堂:
public class PaymentType
{
@JsonProperty("Monthly")
public List<String> monthly;
@JsonProperty("Prepaid")
public List<String> prepaid;
//getter and setters
}
public PaymentTypeResponse
{
@JsonProperty("paymentType")
public List<PaymentType> paymentType;
//setters and Getters
}
公共类付费类型
{
@JsonProperty(“每月”)
每月公开名单;
@JsonProperty(“预付”)
预付公众名单;
//二传手
}
公共付款类型响应
{
@JsonProperty(“paymentType”)
公共列表支付类型;
//二传手和接球手
}
根据您的pojo类,您的json不正确。在json中,“paymentType”数组中的第三个元素是一个空字符串,它应该是一个数组,也可以是null
从以下位置更改json-
{
"paymentType": [{
"Monthly": ["Monthly", "Monthly"],
"Prepaid": ["Prepaid", "Prepaid"]
}, ""]
}
为此—
{
"paymentType": [{
"Monthly": ["Monthly", "Monthly"],
"Prepaid": ["Prepaid", "Prepaid"]
}]
}
Json字符串-
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]},null]}";
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]}]}";
或本条—
{
"paymentType": [{
"Monthly": ["Monthly", "Monthly"],
"Prepaid": ["Prepaid", "Prepaid"]
}, null]
}
Json字符串-
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]},null]}";
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]}]}";
如果您只接收到
null
或空字符串,而不是正确表示PaymentType
类的JSON对象,那么在ObjectMapper
中设置以下反序列化功能就足够了:
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
现在,空字符串将被强制为null
,您将不再有此问题
一种更通用的方法(尽管处理起来更复杂)是向
PaymentType
类添加一个接受String
参数的构造函数:
public PaymentType() {
}
public PaymentType(String json) {
// parse the json string here and initialize members
}
在接收String
参数的构造函数中,可以根据需要解析字符串
请注意,您还需要添加no-args构造函数,以便Jackson可以从有效的JSON反序列化。请添加PaymentTypeResponse类Hi感谢您的回复,我无法更改JSON的开发方式,因为它包含空值。基于这个json,我编写了这个类。我无法编写第3个,因为它包含空值,因此您必须编写自己的自定义反序列化程序,这可能会有所帮助-