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

MFF8.0中JS客户端调用JS适配器返回415错误的解决求助

解决MFF8.0中JS客户端调用适配器返回415 Unsupported Media Type的问题

这个415错误的核心原因是请求的媒体类型与服务器预期不匹配,而且服务器端没生成日志说明请求根本没到达你的适配器处理逻辑,就被请求解析层拦截了。咱们一步步来修复:

1. 先修复客户端代码的语法错误

你客户端代码里的WLResourceRequest构造函数有个明显的语法问题——URL参数的闭合引号丢了,这会导致代码执行异常,甚至请求都发不出去:

// 错误写法
var resourceRequest = new WLResourceRequest("/adapters/myAdapter/search, WLResourceRequest.POST);
// 正确写法
var resourceRequest = new WLResourceRequest("/adapters/myAdapter/search", WLResourceRequest.POST);

2. 正确序列化JSON请求体

虽然你设置了Content-Type: application/json;charset=utf-8,但直接把JavaScript对象传给send()方法是不对的——WLResourceRequest的send()方法如果接收对象,默认会按application/x-www-form-urlencoded格式编码,这就和你设置的Content-Type冲突了,服务器自然返回415。

你需要把对象手动序列化为JSON字符串再发送:

// 原代码
resourceRequest.send(parameters[0]).then(...)
// 修改后
resourceRequest.send(JSON.stringify(parameters[0])).then(...)

3. 验证适配器的端点配置

确保你的JavaScript适配器已经正确把search函数暴露为POST端点,检查适配器的XML配置(比如adapter.xml)里的<procedure>标签,应该类似这样:

<procedure name="search" securityTest="wl_unprotected"/>

如果没配置或者配置成了GET请求,也会导致请求被拦截。

4. 额外检查请求头顺序

确保setHeader的调用顺序在send之前,而且没有被后续代码覆盖:

var resourceRequest = new WLResourceRequest("/adapters/myAdapter/search", WLResourceRequest.POST);
resourceRequest.setTimeout(60000);
// 先设置Content-Type,再发送请求
resourceRequest.setHeader("Content-Type", "application/json;charset=utf-8");
// 然后执行send操作

为什么会出现这个问题?

当你设置了application/json的Content-Type,但实际发送的是表单编码的数据时,服务器的请求解析器无法识别这种不匹配的格式,直接返回415错误,请求根本没机会到达你的search函数,所以服务器端不会生成searching…的日志。

按上面的步骤修改后,应该就能正常调用适配器了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:13:37