【发布时间】:2018-02-20 01:50:39
【问题描述】:
我是 Java/AWS 等的新手,AWS lambda 我们不会反序列化我认为是微不足道的例子。
API 网关日志,它将 JSON 发送到我的 lambda:
请求测试请求的执行日志 2017 年 9 月 11 日星期一 18:04:06 UTC:开始执行请求:test-invoke-request 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 was here”} 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:function:uppertolowercase/invocations 2017 年 9 月 11 日星期一 18:04:06 UTC:端点请求标头:{x-amzn-lambda-integration-tag=test-request, Authorization=****************** ****************************************************** ****************************************************** ****************************************************** ****************************************************** ****************************************************** ****************************************************** **********8acc24,X-Amz-Date=20170911T180406Z,x-amzn-apigateway-api-id=8fjgcr51va,X-Amz-Source-Arn=arn:aws:execute-api:us-西2:003374398906:8fjgcr51va /空/ POST /,接受=应用/ JSON,用户代理= AmazonAPIGateway_8fjgcr51va,X-AMZ-安全令牌= XXXXXXX ////////// wEaDM3BrDjbuGSwMFT5lCK3AyBVM7duW9tzEe / bcWqWiYNIxkpMjTdDZaW3U32asJ4qvntUsRpjfSIhLWAds74XhzHbI7GzXMuV3zQYCIiYRX0ZL1s524J7mETGFN4OredlGln7CCEs3WR417UaPB4XLh6E0v71Srpg4a1kG7KB6426gN9CvXR0mmYbwpl9qtp9bovLgIoVnjYbx5j7qd7Fa3U4wQOqcHonlKtN / uDXMFW + vfHOJyu3gQUyvoVpMuXrQSF/gptEXG+l0v4+v1exq67sp8G5d8h1kAQTN Qep8Q19kyOi9hWbNDyU7FzXWvfSRX7f9n6NGIuZ6LYIF3g2kPFY [截断] 2017 年 9 月 11 日星期一 18:04:06 UTC:转换后的端点请求正文:{“input”:“richard was here”} 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:uppertolowercase/invocations 发送请求 2017 年 9 月 11 日星期一 18:04:06 UTC:收到回复。集成延迟:73 毫秒 2017 年 9 月 11 日星期一 18:04:06 UTC:转换前的端点响应正文:{"errorMessage":"java.util.LinkedHashMap cannot be cast to com.morethanheroic.uppercase.domain.UppercaseRequest","errorType":"java. lang.ClassCastException","stackTrace":["com.morethanheroic.uppercase.UppercaseFunction.apply(UppercaseFunction.java:13)","org.springframework.cloud.function.support.FluxFunction.lambda$apply$0(FluxFunction.java :42)","reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:107)","reactor.core.publisher.FluxJust$WeakScalarSubscription.request(FluxJust.java:90)","reactor. core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:159)","reactor.core.publisher.BlockingIterable$SubscriberIterator.onSubscribe(BlockingIterable.java:214)","reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber. onSubscribe(FluxMapFuseable.java:90)","reactor.core.publisher.FluxJust.subscribe(FluxJust.java:67)","reactor.core.publisher.FluxMapFuseab le.subscribe(FluxMapFuseable.java:63)","reactor.core.pu [截断] 2017 年 9 月 11 日星期一 18:04:06 UTC:端点响应标头:{x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=9a0ca35b-971b-11e7-b0d0-653f3fe89968, Connection=keep-alive, Content-Length=1557,X-Amz-Function-Error=Unhandled,Date=Mon,2017 年 9 月 11 日 18:04:05 GMT,X-Amzn-Trace-Id=root=1-59b6d016-3a1ae0e3274a3e84e451bf13;sampled=0,内容类型=应用程序/json} 2017 年 9 月 11 日星期一 18:04:06 UTC:转换后的方法响应正文:{"errorMessage":"java.util.LinkedHashMap 无法转换为 com.morethanheroic.uppercase.domain.UppercaseRequest","errorType":"java. lang.ClassCastException","stackTrace":["com.morethanheroic.uppercase.UppercaseFunction.apply(UppercaseFunction.java:13)","org.springframework.cloud.function.support.FluxFunction.lambda$apply$0(FluxFunction.java :42)","reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:107)","reactor.core.publisher.FluxJust$WeakScalarSubscription.request(FluxJust.java:90)","reactor. core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:159)","reactor.core.publisher.BlockingIterable$SubscriberIterator.onSubscribe(BlockingIterable.java:214)","reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber. onSubscribe(FluxMapFuseable.java:90)","reactor.core.publisher.FluxJust.subscribe(FluxJust.java:67)","reactor.core.publisher.FluxMapFuseable.订阅(FluxMapFuseable.java:63)","reactor.core.publi [截断] 2017 年 9 月 11 日星期一 18:04:06 UTC:方法响应标头:{X-Amzn-Trace-Id=sampled=0;root=1-59b6d016-3a1ae0e3274a3e84e451bf13, Content-Type=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.morethanheroic.uppercase.handler.aws.UppercaseFunctionHandler::handleRequest
【问题讨论】:
-
如果那是 JSON,那是目标,那么 AWS 知道如何进行转换。所以我希望你省略了一些关键信息。例如,您没有提及处理程序或它向 AWS 声明的方式。
-
使用处理程序更新问题
-
所以你使用的是spring cloud功能。示例项目是否有效,还是您正在运行的代码(目前尚不清楚)?
-
您是如何部署到 Lambda 的?
-
我直接将 zip 上传到 aws... 奇怪的是我遇到了这个问题,然后它就消失了,我不知道为什么,再次上传,现在它失败了。测试确认 json 可以与类一起使用,但在 aws 中它不会。
标签: java aws-lambda aws-api-gateway