![](/img/trans.png)
[英]How do I define a method which takes a lambda as a parameter in Java 8?
[英]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)
为方便起见并帮助您防止错误,有RequestHandler
和RequestStreamHandler
接口可以捕获上面的方法签名( 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.