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

如何在Apache Camel中合并JSON校验结果与原JSON负载返回?

解决方案

你可以通过以下方式实现需求:在路由开始时保存原始JSON到Exchange属性,然后分别在校验成功和异常分支中组装目标JSON对象。

完整路由代码

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.Exchange;
import org.apache.camel.component.jsonvalidator.JsonValidationException;
import java.util.HashMap;
import java.util.Map;

// ...

from("direct:myValidator")
    .log("Validating json...")
    // 提前保存原始JSON到Exchange属性,避免后续操作修改原数据
    .setProperty("originalJson", body(String.class))
    .to("json-validator:myschema.json")
    // 校验成功时,返回包含原JSON和成功信息的结果
    .transform().exchange(exchange -> {
        String originalJson = exchange.getProperty("originalJson", String.class);
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("validatedJson", originalJson);
        resultMap.put("validationResult", "Validation passed successfully");
        
        return new ObjectMapper().writeValueAsString(resultMap);
    })
    // 捕获JSON校验异常
    .onException(JsonValidationException.class)
        .continued(true) // 继续路由流程,不中断
        // 校验失败时,组合原JSON和错误信息
        .transform().exchange(exchange -> {
            String originalJson = exchange.getProperty("originalJson", String.class);
            JsonValidationException validationException = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, JsonValidationException.class);
            
            Map<String, Object> errorResultMap = new HashMap<>();
            errorResultMap.put("validatedJson", originalJson);
            errorResultMap.put("validationResult", "Validation failed: " + validationException.getMessage());
            
            return new ObjectMapper().writeValueAsString(errorResultMap);
        });

关键说明

  • 保存原始JSON:通过setProperty将原始请求体存入Exchange属性,确保在校验失败时能准确获取到未修改的原数据。
  • 校验成功分支:从Exchange属性中取出原JSON,用HashMap组装成包含validatedJson和validationResult的结构,再通过ObjectMapper转换为JSON字符串。
  • 异常处理分支:通过Exchange.EXCEPTION_CAUGHT获取捕获到的校验异常,提取错误信息后,同样组装成目标JSON格式返回。
  • 依赖要求:确保项目中引入了Jackson依赖(com.fasterxml.jackson.core:jackson-databind),用于JSON对象的序列化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:35:59