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

能否在非Mule环境的Spring Boot项目中调用DataWeave进行JSON转换?

在Spring Boot应用中使用DataWeave实现JSON数据转换

当然可以在Spring Boot应用中集成DataWeave来实现负载转换。DataWeave是MuleSoft旗下的强大数据转换语言,虽然最初为Mule应用设计,但现在可以通过独立库在Spring Boot中使用。

步骤1:添加依赖(Maven/Gradle)

DataWeave的包不在默认Maven中央仓库,得先配置MuleSoft的发布仓库,再添加核心依赖:

Maven配置

<repositories>
    <repository>
        <id>mulesoft-releases</id>
        <name>MuleSoft Releases Repository</name>
        <url>https://repository.mulesoft.org/releases/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.mulesoft.weave</groupId>
        <artifactId>weave-runtime</artifactId>
        <version>2.4.0</version> <!-- 替换为最新稳定版 -->
    </dependency>
    <dependency>
        <groupId>com.mulesoft.weave</groupId>
        <artifactId>weave-module-json</artifactId>
        <version>2.4.0</version>
    </dependency>
</dependencies>

Gradle配置

repositories {
    maven { url "https://repository.mulesoft.org/releases/" }
}

dependencies {
    implementation 'com.mulesoft.weave:weave-runtime:2.4.0'
    implementation 'com.mulesoft.weave:weave-module-json:2.4.0'
}

步骤2:编写DataWeave转换脚本

把转换逻辑写在.dwl文件里,比如在src/main/resources下创建user-transform.dwl:

%dw 2.0
output application/json
---
{
    userId: payload.id,
    fullName: payload.firstName ++ " " ++ payload.lastName,
    contactInfo: {
        email: payload.email,
        phoneNumber: payload.phone
    }
}

这个示例是把包含id、firstName、lastName、email、phone的输入JSON,转换成结构更清晰的输出JSON。

步骤3:在Spring Boot中调用DataWeave

写一个服务类加载脚本并执行转换:

import com.mulesoft.weave.Weave;
import com.mulesoft.weave.reader.ByteArrayResource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

@Service
public class DataWeaveTransformService {

    public String transformUserJson(String inputJson) throws IOException {
        // 加载resources下的转换脚本
        ClassPathResource scriptResource = new ClassPathResource("user-transform.dwl");
        byte[] scriptBytes = scriptResource.getInputStream().readAllBytes();
        ByteArrayResource weaveResource = new ByteArrayResource(scriptBytes, StandardCharsets.UTF_8.name());

        // 执行转换,输入原始JSON字符串,输出转换后的JSON字符串
        return Weave.execute(weaveResource, inputJson, String.class);
    }
}

然后在控制器里调用这个服务:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class UserController {

    private final DataWeaveTransformService transformService;

    // 构造注入服务
    public UserController(DataWeaveTransformService transformService) {
        this.transformService = transformService;
    }

    @PostMapping("/transform-user")
    public String transformUser(@RequestBody String inputJson) throws IOException {
        return transformService.transformUserJson(inputJson);
    }
}

实用注意事项

  • 版本兼容:尽量选稳定版,避免和Spring Boot的依赖冲突,可参考MuleSoft官方文档确认版本适配情况
  • 脚本维护:复杂转换逻辑单独放.dwl文件,比硬编码更易读易改
  • 错误处理:实际使用要捕获WeaveException这类异常,处理脚本语法错误、数据结构不匹配等问题
  • 性能优化:高频转换场景可以缓存已编译的DataWeave脚本,减少重复编译开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:52:30