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

在AWS的Spring Cloud Function中配置自定义Jackson序列化/反序列化

解决Spring Cloud Function部署AWS Lambda时Jackson自定义配置问题

核心问题分析

Spring Cloud Function的AWS适配器并未直接使用Spring容器中注册的ObjectMapper Bean,而是通过自身的JacksonMapper实例处理序列化/反序列化,因此直接标记@Primary的ObjectMapper无法生效。另外你遇到的空输入转换错误,是因为Supplier类型函数在Lambda触发时可能接收空请求体,默认转换逻辑会尝试解析空内容导致异常。

解决方案步骤

1. 封装ObjectId序列化/反序列化到Jackson模块

将你已实现的ObjectIdJsonConverter中的序列化器/反序列化器封装为Jackson模块,便于统一注册:

public class ObjectIdModule extends SimpleModule {
    public ObjectIdModule() {
        addSerializer(ObjectId.class, new ObjectIdJsonConverter.ObjectIdSerializer());
        addDeserializer(ObjectId.class, new ObjectIdJsonConverter.ObjectIdDeserializer());
    }
}

2. 实现JsonMapperCustomizer定制Jackson配置

通过Spring Cloud Function提供的JsonMapperCustomizer接口,直接修改AWS适配器使用的JacksonMapper实例:

@Component
public class CustomJsonMapperConfig implements JsonMapperCustomizer {
    @Override
    public void customize(JacksonMapper jacksonMapper) {
        // 注册ObjectId自定义模块
        jacksonMapper.getObjectMapper().registerModule(new ObjectIdModule());
        // 可添加其他Jackson全局配置,比如忽略未知属性
        jacksonMapper.getObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }
}

3. 配置空输入处理避免转换错误

针对Supplier类型函数(如你的ListCustomers),在application.properties中添加配置,允许空请求体:

spring.cloud.function.adapter.aws.supplier.use-empty-payload=true

4. 调整Subscriber类注解(可选)

由于已经通过全局模块注册了序列化/反序列化规则,无需在_id字段上单独添加@JsonSerialize和@JsonDeserialize注解,保持类简洁:

@NoArgsConstructor
@Data
@Document("subscriber")
public class Subscriber {
    @Id
    private ObjectId _id;
    private String firstName;
    private String lastName;
    private String emailAddress;
}

验证

重新打包部署到AWS Lambda后,测试调用:

  • 当返回Subscriber数据时,_id会按你的自定义规则序列化为字符串
  • 空输入触发的Lambda调用(如定时触发)不会再出现MismatchedInputException异常

内容的提问来源于stack exchange,提问作者user521990

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:14:54