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

Spring Boot Apache Camel REST API接收List<MyDtoClass>异常问题

Apache Camel REST DSL 批量创建端点问题解决建议

我用Spring Boot结合Apache Camel REST DSL开发REST API,除createBatch外其余端点均正常工作:

  • getById
  • getAllDocs
  • delete
  • deleteBatch
  • create

问题描述

createBatch端点(地址:http://localhost:8080/my-rest-api/createBatch)无法接收List类型输入,存在类型转换问题,尝试多种转换方法均失败。

请求体示例:

[
  {
    "shipperNumber": "AAAA",
    "startDate": "2024-08-05T11:40:15.123456",
    "endDate": "2024-09-01T02:36:15.678543"
  }, {
    "shipperNumber": "BBBB",
    "startDate": "2024-08-06T14:30:00.654321",
    "endDate": "2024-09-10T04:15:00.987654"
  }
]

期望效果:接收List后逐个调用单个create端点。


解决建议

1. 明确请求体的类型绑定

在REST DSL配置中,为createBatch端点指定JSON数据格式并明确泛型类型,避免类型擦除导致的转换失败:

// 定义针对List<你的实体类>的Jackson数据格式
JacksonDataFormat batchDataFormat = new JacksonDataFormat();
batchDataFormat.setType(new TypeReference<List<ShipperDoc>>() {});

// 配置REST端点
rest("/my-rest-api")
    .post("/createBatch")
    .consumes("application/json")
    .produces("application/json")
    .dataFormat(batchDataFormat)
    .to("direct:handleBatchCreate");

2. 拆分List并转发到单个create逻辑

在路由中使用split处理器拆分接收到的List,逐个调用单个create的处理逻辑:

// 批量处理路由
from("direct:handleBatchCreate")
    .split(body()) // 拆分List中的每个元素
    .to("direct:handleSingleCreate") // 转发到单个创建的路由
    .end()
    .setBody(constant("批量创建完成"));

// 单个创建的路由(复用原create端点的逻辑)
from("direct:handleSingleCreate")
    .bean(你的业务服务类.class, "create"); // 调用业务层的create方法

3. 检查实体类的序列化配置

确保实体类具备正确的序列化/反序列化配置,比如日期字段的格式化:

@Data
public class ShipperDoc {
    private String shipperNumber;
    
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
    private LocalDateTime startDate;
    
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
    private LocalDateTime endDate;
}

4. 调试排查转换问题

在路由中添加日志,查看请求体的原始内容和转换后的对象状态,定位问题:

from("direct:handleBatchCreate")
    .log("原始请求体: ${body}")
    .split(body())
    .log("当前处理的单条数据: ${body}")
    .to("direct:handleSingleCreate");

同时确认项目中已引入正确的依赖:Spring Boot项目需确保spring-boot-starter-json或camel-jackson-starter依赖存在。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:17:08