以下是我使用杰克逊转换为pojo的json响应 -
{
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:不能 实例化类型的值[simple type,class 来自String value('')的com.test.sample.PaymentTypeRespons];没有 单字符串构造函数/工厂方法
响应中有一个空白值,如何在转换为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
}
答案 0 :(得分:1)
如果您只收到null
或空字符串,而不是正确表示PaymentType
类的JSON对象,则在ObjectMapper
中设置以下反序列化功能就足够了:
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
现在,空字符串将被强制为null
,并且您将不再遇到此问题。
更通用的方法(尽管处理起来更复杂)是在String
类中添加一个接受PaymentType
自变量的构造函数:
public PaymentType() {
}
public PaymentType(String json) {
// parse the json string here and initialize members
}
在接收String
参数的构造函数中,您可以根据需要解析字符串。
请注意,您还需要添加no-args构造函数,以便Jackson可以从有效JSON反序列化。
答案 1 :(得分:0)
根据你的pojo课程,你的json是不正确的。在你的json中,“paymentType”数组中的第3个元素是一个空字符串,应该是一个数组或者只是null。
改变你的json -
{
"paymentType": [{
"Monthly": ["Monthly", "Monthly"],
"Prepaid": ["Prepaid", "Prepaid"]
}, ""]
}
到此 -
{
"paymentType": [{
"Monthly": ["Monthly", "Monthly"],
"Prepaid": ["Prepaid", "Prepaid"]
}]
}
Json string -
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]},null]}";
或者这个 -
{
"paymentType": [{
"Monthly": ["Monthly", "Monthly"],
"Prepaid": ["Prepaid", "Prepaid"]
}, null]
}
Json string -
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]}]}";