Java AWS SDK Lambda调用失败,因为输入不是Base-64编码的
当我试图调用Lambda函数时(下面是我的代码),我在CloudWatch日志中收到一个错误,说输入不是有效的Base-64字符串Java AWS SDK Lambda调用失败,因为输入不是Base-64编码的,java,aws-lambda,aws-sdk-java-2.0,Java,Aws Lambda,Aws Sdk Java 2.0,当我试图调用Lambda函数时(下面是我的代码),我在CloudWatch日志中收到一个错误,说输入不是有效的Base-64字符串 String payload = "xxxxxxxxxxx"; SdkBytes payloadBytes = SdkBytes.fromUtf8String(payload); String routingUri = getRoutingUri(); InvokeRequest invokeRequest = Inv
String payload = "xxxxxxxxxxx";
SdkBytes payloadBytes = SdkBytes.fromUtf8String(payload);
String routingUri = getRoutingUri();
InvokeRequest invokeRequest = InvokeRequest.builder()
.functionName(routingUri)
.payload(payloadBytes)
.invocationType("RequestResponse")
.build();
InvokeResponse result = lambdaClient.invoke(invokeRequest);
我尝试了各种方法将请求编码为Base-64,但似乎没有任何效果
- 我的AWS SDK版本是2.15.14
software.amazon.awssdk
物料清单
2.15.14
请提供帮助。这里您需要使用java.util包中的Base64.Encoder对字符串进行结束编码这取决于您在有效负载中设置的数据类型,例如,如果要调用的变量之一是byte[],您可以这样做
public byte[] invokeFunction(byte[] data,String certificate_serial) {
String dataBase64 = Base64.getUrlEncoder().encodeToString(data);
// Need a SdkBytes instance for the payload
SdkBytes payload = SdkBytes.fromUtf8String("{\n" + " \"nameOfTheVariableInTheLambdaYouAreInvoking\": \"" + dataBase64 + "\" \n" + "}");
字符串有效负载是否与您在“SdkBytes.fromUtf8String(base64Payload)”的下一行中使用的有效负载相同,因为它是一个不同的变量名是相同的。对不起,我给错名字了没问题。这些答案对你有帮助吗?你应该举个例子。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.15.14</version>
</dependency>
public byte[] invokeFunction(byte[] data,String certificate_serial) {
String dataBase64 = Base64.getUrlEncoder().encodeToString(data);
// Need a SdkBytes instance for the payload
SdkBytes payload = SdkBytes.fromUtf8String("{\n" + " \"nameOfTheVariableInTheLambdaYouAreInvoking\": \"" + dataBase64 + "\" \n" + "}");