2014-01-17 78 views
5

我試圖通過來自Stripe Payments的發佈請求接收webhook。 Java方法來處理它看起來是這樣的:如何從Java中的Stripe接收Webhook

@ResponseBody 
@RequestMapping( consumes="application/json", 
        produces="application/json", 
        method=RequestMethod.POST, 
        value="stripeWebhookEndpoint") 
public String stripeWebhookEndpoint(Event event){ 

    logger.info("\n\n" + event.toString()); 

    logger.info("\n\n" + event.getId()); 

    return null; 
} 

條紋事件總是與所有空值回來:

<[email protected] id=null> JSON: { 
    "id": null, 
    "type": null, 
    "user_id": null, 
    "livemode": null, 
    "created": null, 
    "data": null, 
    "pending_webhooks": null 
} 

如果該方法接收一個字符串,而是和使用@RequestBody :

@ResponseBody 
@RequestMapping( consumes="application/json", 
        produces="application/json", 
        method=RequestMethod.POST, 
        value="stripeWebhookEndpoint") 
public String stripeWebhookEndpoint(@RequestBody String json){ 

    logger.info(json); 

    return null; 
} 

在這裏,它打印沒有空值的json。這裏是正在打印請求的一部分:

{ 
    "created": 1326853478, 
    "livemode": false, 
    "id": "evt_00000000000000", 
    "type": "charge.succeeded", 
    "object": "event", 
    "request": null, 
    "data": { 
    "object": { 
     "id": "ch_00000000000000", 
     "object": "charge", 
     "created": 1389985862, 
     "livemode": false, 
     "paid": true, 
     "amount": 2995, 
     "currency": "usd", 
... 
} 

但使用@RequestBody與條紋事件參數給出400:語法錯誤。

那麼,爲什麼我不能採取正確的類型,一個條紋事件,作爲參數?

+0

感謝您的問題,但它可能從條紋命中'localhost'網址? –

回答

9

以下是我所做的:

Java方法仍然以Event作爲json字符串。然後我用條紋的自定義GSON適配器,並得到了事件有:

Event event = Event.gson.fromJson(stripeJsonEvent, Event.class); 

stripeJsonEvent是網絡掛接端點採取JSON字符串。

+2

從版本庫1.25開始,它是'Event.GSON.fromJson(stripeJsonEvent,Event.class);' –

7

,所以在看自己的代碼後,我一直在尋找相同的答案,這裏是他們實際上是如何做到這一點:

String rawJson = IOUtils.toString(request.getInputStream()); 
Event event = APIResource.GSON.fromJson(rawJson, Event.class); 

APIResource來自他們的圖書館(我用1.6.5)

+1

嗨Juan。 +1使用API​​Resource。我也有如何做到這一點的答案。 – Matt

+0

請求包是什麼包? –

+1

如何獲取事件對象的子對象的屬性。比方說,我想從事件對象獲取訂閱ID。我無法通過event.get ....()直接訪問它,因爲它不可用。 – viper

相關問題