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

如何使用Apache Camel的Simple语言去除JSON中的尾部空格

配置无效原因

你使用的<simple trim="true">${body}</simple>配置仅会修剪整个body字符串的首尾空白字符,不会处理JSON结构内部的字段值尾部空格,也无法处理你示例中shortName 、sector 这类字段名本身带的尾部空格,因此不会生效。

可行解决方案

方案1:Groovy脚本处理(适合XML DSL,无需定义实体类)

该方案无需提前定义JSON对应的Java实体,可动态适配JSON结构,直接在XML路由中配置即可:

  1. 首先引入Camel Groovy依赖(Maven示例):
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-groovy</artifactId>
    <version>你的Camel版本号</version>
</dependency>
  1. 替换原有setBody配置为以下内容:
<setBody>
  <groovy>
    import groovy.json.JsonSlurper
    import groovy.json.JsonOutput

    def json = new JsonSlurper().parseText(body)
    // 遍历dedup数组下的所有对象
    json.dedup.each { item ->
      def trimmedItem = [:]
      item.each { key, value ->
        // 修剪字段名尾部空格,不需要可删除本行直接用原key
        def trimmedKey = key.trim()
        // 如果是字符串类型则修剪值的首尾空格,其他类型保留原值
        def trimmedValue = value instanceof String ? value.trim() : value
        trimmedItem[trimmedKey] = trimmedValue
      }
      // 替换原对象内容
      item.clear()
      item.putAll(trimmedItem)
    }
    // 输出为JSON字符串
    JsonOutput.toJson(json)
  </groovy>
</setBody>

方案2:Jackson结构化处理(适合结构固定的场景,性能更优)

如果你的JSON结构固定,可以定义对应的Java实体类,结合Jackson的自定义序列化器自动修剪所有字符串字段:

  1. 引入Camel Jackson依赖:
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jackson</artifactId>
    <version>你的Camel版本号</version>
</dependency>
  1. 自定义String序列化器:
public class TrimStringSerializer extends StdSerializer<String> {
    public TrimStringSerializer() {
        super(String.class);
    }

    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeString(value == null ? null : value.trim());
    }
}
  1. 路由中配置JSON转换即可自动完成修剪:
// Java DSL 示例
from("你的输入端点")
    .unmarshal().json(JsonLibrary.Jackson, YourJsonEntity.class)
    .marshal().json(JsonLibrary.Jackson, new ObjectMapper().registerModule(new SimpleModule().addSerializer(String.class, new TrimStringSerializer())))
    .to("你的输出端点");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:24:00