Java SE 11下POST传递List<List<String>>至AWS Lambda遇空值问题
解决AWS Lambda中嵌套
List<List<String>>属性无法解析的问题 问题分析
你的KeyParamInfo模型里的referenceData(嵌套列表类型)无法被AWS Lambda正确反序列化,而key属性正常解析,核心原因是Lambda默认的Jackson序列化器在处理嵌套集合时,可能需要显式配置或注解,或是Spring Boot与Lambda的适配器配置存在遗漏。
解决方案
方案1:给模型属性添加Jackson注解
在referenceData属性上添加@JsonProperty注解,显式绑定JSON字段名(即使字段名一致,也能确保序列化器正确识别嵌套结构):
import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; public class KeyParamInfo { private String key; @JsonProperty("referenceData") private List<List<String>> referenceData; // 原有的getter、setter方法保持不变 }
方案2:确保Spring Cloud Function Adapter依赖正确
如果用Spring Boot开发Lambda,必须引入AWS适配依赖,否则请求序列化逻辑会异常。在pom.xml中添加:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-function-adapter-aws</artifactId> </dependency>
注意:Spring Boot版本需与该适配依赖版本兼容(建议使用Spring Boot 2.x系列,对应Spring Cloud Hoxton及以上版本)。
方案3:手动解析请求体(原生Lambda方式)
若不想依赖Spring Cloud适配器,可将Lambda输入类型改为InputStream,手动用Jackson解析JSON,规避默认序列化器的问题:
import com.fasterxml.jackson.databind.ObjectMapper; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class SampleApplication implements RequestHandler<InputStream, List<String>> { // 复用ObjectMapper实例提升性能 private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @Override public List<String> handleRequest(InputStream input, Context context) { List<String> response = new ArrayList<>(); try { // 手动解析输入流为KeyParamInfo对象 KeyParamInfo inputObj = OBJECT_MAPPER.readValue(input, KeyParamInfo.class); if (inputObj != null) { if (inputObj.getReferenceData() != null && !inputObj.getReferenceData().isEmpty()) { response.add("Reference Data Received"); } else if (inputObj.getKey() != null && !inputObj.getKey().isBlank()) { response.add("Data Received with key " + inputObj.getKey()); } else { response.add("Empty Data Object"); } } else { response.add("Invalid Data"); } } catch (Exception e) { response.add("Exception occured in Main method - " + e.getMessage()); } return response; } }
方案4:检查请求头配置
确保Postman请求的Content-Type头设置为application/json,错误的Content-Type会导致Lambda无法正确识别请求体格式,进而影响嵌套属性的解析。
验证
修改后重新部署Lambda,用原Postman请求测试,此时referenceData应能被正确解析,返回结果会变为["Reference Data Received"]。
内容的提问来源于stack exchange,提问作者B.Balamanigandan
相关产品推荐
相关产品推荐

