繁体   English   中英

如何定义AWS Lambda的函数以Java启动?

[英]How do I define a function for AWS Lambda to start in Java?

我正在使用这个文档作为教程http://docs.aws.amazon.com/lambda/latest/dg/get-started-step4-optional.html

他们为AWS lamda提供的输入方法/功能如下所示:

public String myHandler(int myCount, Context context) {
    LambdaLogger logger = context.getLogger();
    logger.log("received : " + myCount);
    return String.valueOf(myCount);
}

我的问题是我不知道我可以定义什么参数以及AWS lambda如何知道传递给我的内容。 看到我能提出的所有潜在方法签名真是太好了。 也许我只是没有找到适合这个文档的地方,但我希望能够做类似的事情

public String myHandler(String json) {
   MyJsonValidatorClass validator = new ...;
boolean isValid = validator.isValidJson(json);
    return String.valueOf(isValid);
}

我真的不确定我能在AWS Lamdas做什么。 在编写java主应用程序时,我知道我有String [] args来处理而没有别的。 我在这里错过了什么吗? 或者我只是想到这完全错了?

lambda运行时使用反射来查看方法所需的类型,因为它是第一个参数,然后尝试根据该规范解析原始输入数据。 它支持类型列在这里

  • 简单Java类型(AWS Lambda支持String,Integer,Boolean,Map和List类型)
  • POJO(Plain Old Java Object)类型
  • 流类型(如果您不想使用POJO或Lambda的序列化方法不能满足您的需求,您可以使用字节流实现。[..])

处理程序方法的示例如下

// you could do your own json parsing in here
String handler(String input, Context context)

// lambda parses json for you
JoinResponsePojo handler(JoinRequestPojo request, Context context)

// when even String is not enough
void handler(InputStream inputStream, OutputStream outputStream, Context context)

为方便起见并帮助您防止错误,有RequestHandlerRequestStreamHandler接口可以捕获上面的方法签名( docs )。 我通常使用那些而不是自由式实现处理程序方法。

通常最方便的方法是直接使用POJO,因为通常输入 json。 在您可以使用的aws-lambda-java-events中,还有一些预定义的POJO用于​​常见事件。 或者您可以编写自己的内容,如“示例:使用POJO进行处理程序输入/输出(Java)”中所述


js回调用于返回数据,所以你的例子也是

public class ExampleHandler1 implements RequestHandler<String, String> {
    @Override
    public String handleRequest(String input, Context context) {
        // would preferably use some other way to generate json
        return "{\"speech\": \"hello theres\"}";
    }
}

或使用类似的pojo

public class ExampleHandler2 implements RequestHandler<String, Speech> {

    public static class Speech {
        private String speech;
        public String getSpeech() {
            return speech;
        }
        public void setSpeech(String speech) {
            this.speech = speech;
        }
    }

    @Override
    public Speech handleRequest(String input, Context context) {
        Speech speech = new Speech();
        speech.setSpeech("hello theres");
        return speech;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM