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

AWS Lambda含空格JSON键反序列化Java对象字段为空问题

AWS Lambda中带空格JSON字段反序列化null问题排查

可能的原因及解决方案

1. Lombok @Builder与Jackson @JsonProperty的冲突

你的Values和DetailedInformation类同时用了@Builder和Jackson的@JsonProperty,但Lombok默认生成的Builder参数名是驼峰式的detailedInformation,而JSON键是带空格的Detailed Information。Lambda反序列化事件时,Jackson可能优先用Builder实例化对象,但Builder参数名和JSON键不匹配,导致字段无法赋值。

解决办法:
给类添加@Jacksonized注解(需要Lombok 1.18.14+版本),让Lombok生成的Builder兼容Jackson注解:

// Values类修改后
@Data
@Builder
@Jacksonized
@NoArgsConstructor
@AllArgsConstructor
public class Values {
    @JsonProperty("Detailed Information")
    private DetailedInformation detailedInformation;
}

// DetailedInformation类修改后
@Data
@Builder
@Jacksonized
@NoArgsConstructor
@AllArgsConstructor
public class DetailedInformation {
    @JsonProperty("Organization")
    private String organization;
    // 其他字段同理
}

如果无法升级Lombok,可手动给Builder参数加@JsonProperty:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Values {
    @JsonProperty("Detailed Information")
    private DetailedInformation detailedInformation;

    public static class ValuesBuilder {
        @JsonProperty("Detailed Information")
        private DetailedInformation detailedInformation;
    }
}

2. AWS Lambda自带Jackson版本冲突

AWS Lambda运行环境自带Jackson库,如果项目依赖的Jackson版本和环境版本不一致,可能导致@JsonProperty注解失效。

解决办法:

  • 用Maven或Gradle的打包插件(如maven-shade-plugin、shadowJar)构建Fat Jar,将项目依赖的Jackson库一起打包,确保运行时使用指定版本。
  • 避免使用provided scope排除Jackson依赖,可能引发其他兼容性问题。

3. 未配置Jackson支持Lombok

Jackson默认不识别Lombok注解,可能无法正确处理@Data生成的getter/setter,导致字段无法赋值。

解决办法:
添加jackson-datatype-lombok依赖:
Maven:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-lombok</artifactId>
    <version>你的Jackson版本</version>
</dependency>

Gradle:

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-lombok:你的Jackson版本'

如果手动使用ObjectMapper,需注册Lombok模块:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new LombokModule());

4. 键名拼写或格式错误

仔细核对JSON键名和@JsonProperty中的字符串,确保空格、大小写完全一致,比如"Detailed Information"不能写成"DetailedInformation"或"detailed information"。

5. Lambda默认反序列化配置问题

尝试绕过Lambda默认反序列化,手动处理事件字符串:

public class InvokeMyRestAPI implements RequestHandler<String, String> {
    @SneakyThrows
    @Override
    public String handleRequest(String eventStr, Context context) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new LombokModule());
        Values event = objectMapper.readValue(eventStr, Values.class);
        log.info(event);
        // 后续业务代码不变
    }
}

如果手动反序列化能成功,说明Lambda默认反序列化配置存在问题,可继续排查环境配置。

内容的提问来源于stack exchange,提问作者Luis Felipe Gongora Garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:45:05