在Java中,有没有一种方法可以为AWS Lambda处理多个事件对象? 例如,当处理SNSEvent时,我可以执行以下操作:
public class Hello implements RequestHandler<SNSEvent, Response> {
public Response handleRequest(SNSEvent event, Context context) {
//handle SNSEvent here
}
}
有没有办法可以在同一lambda中同时处理SNSEvent和SQSEvent?
答案 0 :(得分:3)
在Java中有多种处理Lambda事件的方法。您正在显示带有AWS定义的POJO的POJO模型,其中将为您处理对象的反序列化。
但是,还有IO Stream方法。这样可以给您InputStream
和OutputStream
来应付自己。从上面的第二个链接派生的代码可以像这样开始:
public class Hello implements RequestStreamHandler{
public void handler(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
// copy and convert the inputStream
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
String inputString = result.toString("UTF-8");
// now try to convert to a SNSEvent using Google GSON
try {
SNSEvent snsEvent = new Gson().fromJson(inputString, SNSEvent.class);
}
catch( JsonSyntaxException jse ) {
// this is where it's weird - what if it is really bad JSON?
}
}
}
最终,此操作是将JSON输入接收,将其复制到String
,然后使用GSON进行转换以尝试转换为对象。您可以将代码尝试转换为任意数量的对象。如果无法转换,GSON fromJson
方法将抛出JsonSyntaxException
。但是,如果完全是垃圾JSON,它也会这样做,因此您需要小心一点。
我正在用GSON展示它,因为我与Jackson进行了太多怪异的交互,这就是Lambda在JSON解析的幕后使用的东西。
但这可以让您自己处理InputStream
,决定如何处理输入并在Response
中发送自己的OutputStream
。