如何使用jackson将json字符串转换为pojo时处理空值或空值

时间:2016-10-23 02:47:58

标签: java json jackson

以下是我使用杰克逊转换为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
}

2 个答案:

答案 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\"]}]}";