2016-04-14 67 views
1

我找到了新的信息。我想也許我已經爲我的S3事件源實現了不正確的接口。到目前爲止,我還沒有得到它的工作或者理解哪個接口應該被實現。 RequestHandler接口要求方法handleRequest返回一個值。有什麼建議麼?AWS Lambda爪哇處理程序Hello World

輸出類型 - 如果您打算調用lambda函數同步 (使用requestResponse則調用類型),您可以返回使用任何支持的數據類型的你的函數的輸出 。例如,如果將Lambda函數用作移動應用程序後端,則爲 ,您是 同步調用它。您的輸出數據類型將被序列化爲JSON中的 。

如果您計劃異步調用Lambda函數(使用 事件調用類型),則outputType應爲void。例如,如果 將AWS Lambda用於Amazon S3,Amazon Kinesis和Amazon SNS等事件源,則這些事件源使用Event調用類型調用Lambda 函數。

我已經創建了一個基本的處理程序,但似乎錯過了繼續暗示我的關鍵步驟。

代碼&錯誤如下:

package example; 

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.LambdaLogger; 
import com.amazonaws.services.lambda.runtime.RequestHandler; 
import com.amazonaws.services.s3.model.S3Event; 

public class Hello implements RequestHandler<S3Event, Object> { 
    public String handleRequest(S3Event input, Context context) { 
     return "Hello"; 
    } 
} 

{ 「的errorMessage」: 「JSON解析過程中出現錯誤」,
「ERRORTYPE」: 「了java.lang.RuntimeException」, 「堆棧跟蹤」: [],
「病因」:{ 「的errorMessage」:「com.fasterxml.jackson.databind.JsonMappingException:能com.amazonaws.services.s3.model.S3Event不 反序列化實例出來 START_OBJECT令牌的\ n來源: [email protected]; :1, column:1「, 」errorType「:」java.io.UncheckedIOException「, 」stackTrace「:[], 」cause「:{ 」errorMessage「:」無法反序列化com的實例。 amazonaws.services.s3.model.S3Event out of START_OBJECT token \ n at Source:[email protected];行: 1,柱:1" , 「ERRORTYPE」: 「com.fasterxml.jackson.databind.JsonMappingException」, 「堆棧跟蹤」:[ 「com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java :148)「, 」com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835)「, 」com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:831)「, 「com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeOther(EnumDeserializer.java:137)」, 「com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:89)」 , 「com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserial ize(EnumDeserializer.java:18)「, 」com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441)「, 」com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader。Java的:1047)「] } }}

+1

我想你應該返回一個可以序列化爲JSON對象的值。 ''「你好」''是無效的。 – garnaat

回答

0

製作方法的handleRequest()的返回類型爲對象,你可以返回 」你好「 太

+0

我想添加一些額外的信息,我發現但似乎評論部分不允許這樣做。 – MikeH

0

你有

錯誤消息。

無法反序列化com.amazonaws.services.s3.model.S3Event的實例出來START_OBJECT令牌

意味着該值作爲輸入p通過您的Lambda函數的參數不代表S3Event對象。

您是從AWS控制檯測試您的Lambda函數,而不是觸發真正的S3事件?
如果是這樣,去LAMBDA>功能> yourFunction中>操作>配置測試活動和選擇S3將S3從樣本事件模板刪除下拉到合適的輸入發送到你的函數的測試。

0

我認爲你不能返回非對象響應。你可以這樣做:

return new Gson().fromJson(jsonObject, Object.class); 

注:jsonObject是一個json,它包含你想要返回的信息。