我是Java/AWS等的新手,对于AWS lambda,我们不会对我认为微不足道的示例进行反序列化。
API网关日志,它正在向我的lambda发送JSON:
请求测试请求的执行日志2017年9月11日星期一18:04:06 UTC:开始执行请求:测试调用请求2017年9月11日星期一18:04:06 UTC:HTTP方法:POST,资源路径:/2017年9月11日星期一18:04:06 UTC:方法请求路径:{}2017年9月11日星期一18:04:06 UTC:方法请求查询字符串:{}2017年9月11日星期一18:04:06 UTC:方法请求标头:{Content-Type=application/json}2017年9月11日星期一18:04:06 UTC:转换前的方法请求正文:{"input":"richard在这里"}2017年9月11日星期一18:04:06 UTC:端点请求URI:https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:003374398906:函数:uppetolowercase/调用2017年9月11日星期一18:04:06 UTC:端点请求标头:{x-amzn-lambda-integration-tag=测试请求,授权=*******************************************************************************************************************z日期=20170911T180406Z,x-amzn-apigateway-api-id=8fjgcr51va,x-Amz-Source-Arn=Arn:aws:execute api:us-west-2:003374398906:8fjgcr 51va/null/POST/,Accept=application/json,User Agent=AmazonAPIGateway_8fjgcr151va,X-Amz-Security-Token=xxxxxxx//////////wEaDM3BrDjbuGSwMFT5lCK3AyBVM7duW9tzEe/bcWqWiYNIxkpMjTdDZaW3U32asJ4qvntUsRpjfSIhLWAds74XhzHbI7GzXMuV3zQYCIYRX0ZL1s524J7mETGFN4OredlGln7CCES3WR417UaPB4XLh6e0v71Srpg4a1kG7KB6426gN9CvXR0mmYbwpl9qtp9bovLgIonjYbx5j7qd7Fa 3U4wQOqcHonlKtN/uDXMFW+vfHOJyu3gQUyvoVpMuXrQSF/gptEXG+l0v4+v1exq67sp8G5d8h1kAQTNQep8Q19kyOi9hWbNDyU7FzXvfSRX7f9n6NGIuZ6LYIF3g2kPFY[TRUNCATED]2017年9月11日星期一18:04:06 UTC:转换后的端点请求正文:{"input":"richard在这里"}2017年9月11日星期一18:04:06 UTC:发送请求至https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:003374398906:function:uppetolowercase/acalls2017年9月11日星期一18:04:06 UTC:收到回复。集成延迟:73毫秒2017年9月11日星期一18:04:06 UTC:转换前的端点响应正文:{"errorMessage":"java.util.LinkedHashMap不能强制转换为com.morethanhoer.capital.domain.UppercaseRequest","errorType":"java.lang.ClassCastException","stackTrace":["com.morethanHoer.capacity.UppercaseFunction.apply(UppercaseFunction.java:13)","org.springframework.cloud.function.support.FluxFunctionLambda$apply$0(FluxFunction.java:42)","reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFusiable.java:107)","reactor.core.publisher.BlockingIterable$SubscriberIterator.onSubscribe(BlockingItarable.java:2142017年9月11日星期一18:04:06 UTC:端点响应标头:{x-amzn-Remapped-Content-Length=0,x-amzn-RequestId=9a0ca35b-971b-11e7-b0d0-653f3fe89968,连接=保持活动,内容长度=1557,x-Amz-Function-Error=未处理,日期=2017年9日星期一,18:04:05 GMT,x-amzn-Trace-Id=root=1-59b6d016-3a1ae0e3274a3e84e451bf13;采样=0,内容类型=application/json}2017年9月11日星期一18:04:06 UTC:转换后的方法响应体:{(FluxFunction.java:42)","reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFusiable.java:107)","reactor.core.publishr.FluxJust$WeakScalarSubscription.request(FluxJust.java:90)","reacer.core.publicer.FluxMap Fuseable$MapFusebleSubscriber.request(fluxMapFusable.java:159)","reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFusiable.java:902017年9月11日星期一18:04:06 UTC:方法响应标头:{X-Amzn-Trace-Id=sampled=0;root=1-59b6d016-3a1ae0e3274a3e84e451bf13,内容类型=application/json}2017年9月11日星期一18:04:06 UTC:成功完成执行2017年9月11日星期一18:04:06 UTC:方法完成,状态:200
我使用这个JSON来提供要反序列化到以下POJO 的数据
{"input":"richard was here"}
public class UppercaseRequest {
private String input;
public String getInput() {
return input;
}
public void setInput(final String input) {
this.input = input;
}
}
这是处理
public class UppercaseFunctionHandler extends SpringBootRequestHandler<UppercaseRequest, UppercaseResponse> {
}
注:取自https://github.com/laxika/spring-cloud-function-aws-example
这个例子中没有记录,但我使用的Lambda入口点是:
com.morethanhaurary.capital.handler.aws。UppercaseFunctionHandler::handleRequest
如果我以正确的方式指定处理程序(在本例中为com.morethanheroic.uppercase.handler.aws.UppercaseFunctionHandler
),它对我有效:
{
"result": "FOO"
}
我认为错误在于AWS控制台中的处理程序声明。您必须放置类的FQN(而不是方法引用)。该方法没有泛型类型信息,除非您重写它(您说它也起作用,但不必要)。
OP制作了自己部署和测试该功能的屏幕截图(https://www.screencast.com/t/mNOLS1XhM),除了处理程序名称之外,它几乎都是完美的。
如果有其他人想尝试,代码就在这里:https://github.com/laxika/spring-cloud-function-aws-example.