You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:05:16