我有以下需要解析的JSON代碼。我正在使用相應的JAX-RS模型。問題是paymillClient
對象爲空。如果我在PaymillSubscription
對象內添加currency
作爲字符串,它將返回EUR
值,而不是null。因此,PaymillClient
對象似乎存在問題,而不是普通的字符串。對於解析嵌套對象的數量是否有限制? Ex,最多2個嵌套對象。所以,因爲在我的情況下有3個,它不起作用。Jersey JAX-RS 3級嵌套對象具有空值
不幸的是,我無法更改需要解析的JSON代碼。我只需要使它與JAX-RS實現一起工作。
{
"event":{
"event_type":"subscription.succeeded",
"event_resource":{
"subscription":{
"id":"sub_29f144a3bc32c71f96e2",
"offer":{ },
"livemode":false,
"amount":200,
"temp_amount":null,
"currency":"EUR",
"name":"Monthly subscription",
"interval":"1 MONTH",
"trial_start":null,
"trial_end":null,
"period_of_validity":null,
"end_of_period":null,
"next_capture_at":1428939744,
"created_at":1426264944,
"updated_at":1426264944,
"canceled_at":null,
"payment":{ },
"app_id":null,
"is_canceled":false,
"is_deleted":false,
"status":"active",
"client":{
"id":"client_c0c24aa7f97e1b8ed15d"
}
},
"transaction":{ }
},
"created_at":1426264944,
"app_id":null
}
}
PaymillEventContainer:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class PaymillEventContainer
{
private PaymillEvent event;
}
PaymillEvent:
@XmlAccessorType(XmlAccessType.FIELD)
public class PaymillEvent
{
@XmlElement(name = "event_type") @DocumentationExample(value = "subscription.succeeded") private String eventType;
@XmlElement(name = "event_resource") private PaymillEventResource eventResource;
}
PaymillEventResource:
@XmlAccessorType(XmlAccessType.FIELD)
public class PaymillEventResource
{
private PaymillClient client;
private PaymillOffer offer;
private PaymillSubscription subscription;
}
PaymillSubscription:
@XmlAccessorType(XmlAccessType.FIELD)
public class PaymillSubscription
{
private PaymillClient client;
private PaymillOffer offer;
}
PaymillClient:
@XmlAccessorType(XmlAccessType.FIELD)
public class PaymillClient
{
@DocumentationExample(value = "client_c0c24aa7f97e1b8ed15d") private String id;
}
API端點代碼:
public Response postSubscriptionSucceeded(PaymillEventContainer paymillEventContainer)
{
PaymillEvent paymillEvent = paymillEventContainer.getPaymillEvent();
PaymillEventResource paymillEventResource = paymillEvent.getEventResource();
PaymillSubscription paymillSubscription = paymillEventResource.getSubscription();
PaymillClient paymillClient = paymillSubscription.getPaymillClient();
PaymillOffer paymillOffer = paymillSubscription.getPaymillOffer();
String clientId = paymillClient.getId(); // NullPointerException
}
您能否給我們列出PaymillSubscription? – mkrakhin 2015-03-13 19:38:19
我的不好,忘了PaymillSubscription,它也有PaymillClient。所以這不是問題。編輯並添加了PaymillSubscription。PaymillEventResource和PaymillSubscription都包含PaymillClient,因爲有兩個不同的API端點可以返回任何一個對象中的客戶端(我知道,並不漂亮,但這不取決於我)。無論哪種方式,PaymillClient在兩種情況下均爲null。 – 2015-03-13 19:38:57
不應該在paymillSubscription而不是getPaymillClient()上調用getClient()? – mkrakhin 2015-03-13 19:52:59