如何使用Java调用无参AWS Lambda函数并获取返回JSON结果
无参数GET类型Lambda函数Java调用方案
核心问题说明
你当前调用返回中Payload显示Sensitive Data Redacted是因为InvokeResult的toString()方法默认做了脱敏处理,并不会返回真实的载荷数据;且无参数调用不需要传入载荷,调整调用逻辑后即可拿到返回的对象列表。
你已配置的lambda:InvokeFunction、lambda:InvokeAsync权限完全满足同步调用需求,不需要额外调整权限配置。
修正后的调用代码
通用调用方法(支持有参/无参场景)
import com.amazonaws.services.lambda.AWSLambda; import com.amazonaws.services.lambda.AWSLambdaClientBuilder; import com.amazonaws.services.lambda.model.InvocationType; import com.amazonaws.services.lambda.model.InvokeRequest; import com.amazonaws.services.lambda.model.InvokeResult; import java.nio.charset.StandardCharsets; public String invokeLambda(String operationName, String payload) { AWSLambda lambdaClient = AWSLambdaClientBuilder.defaultClient(); InvokeRequest request = new InvokeRequest() .withInvocationType(InvocationType.RequestResponse) .withFunctionName(operationName); // 仅当载荷非空时传入,无参数调用直接传null或空字符串即可 if (payload != null && !payload.isBlank()) { request.withPayload(payload); } InvokeResult invokeResult = lambdaClient.invoke(request); // 调用成功判断 if (invokeResult.getStatusCode() == 200 && invokeResult.getFunctionError() == null) { // 将返回的ByteBuffer转为UTF-8编码的JSON字符串 return new String(invokeResult.getPayload().array(), StandardCharsets.UTF_8); } throw new RuntimeException("Lambda调用失败,状态码:" + invokeResult.getStatusCode() + ",错误信息:" + invokeResult.getFunctionError()); }
无参数GET Lambda调用+对象列表解析示例
这里以FastJSON为例,你也可以替换为Jackson等其他JSON解析库:
import com.alibaba.fastjson.JSON; import java.util.List; // 替换为你Lambda返回的实际对象类型 class YourCustomObj { // 对应对象字段定义 private String id; private String name; // getter、setter省略 } public List<YourCustomObj> getLambdaObjList() { // 无参数调用直接传空载荷 String resJson = invokeLambda("你的GET Lambda函数名称", null); // 将JSON数组转为自定义对象列表 return JSON.parseArray(resJson, YourCustomObj.class); }
提示:如果你的GET Lambda没有读取入参的逻辑,即使你传入空JSON字符串
"{}"作为载荷,也不会影响函数正常执行。
内容的提问来源于stack exchange,提问作者wild_tola
相关产品推荐
相关产品推荐

