Azure 数据工厂:响应内容不是有效的 JObject
Azure Data Factory: Response Content is not a valid JObject
我的 ADF 管道调用 Azure 函数(用 Java 编写)。
但是,管道失败并显示此消息:
Response Content is not a valid JObject.
我四处寻找,但似乎无法在 Java 中找到 JObject 的任何示例。
谁能告诉我如何做到这一点?
您只需要一个 JSON object return 函数。
{
"name": "adam"
}
不幸的是,如果你 return object 数组,虽然它是正确的 JSON 符号,但它会失败并出现 Response Content is not a valid JObject.
错误。
所以
[{
"name": "adam"
}, {
"name": "tom"
}]
Return 类似
{
"items": [{
"name": "adam"
}, {
"name": "tom"
}]
}
根据 API,您可能需要添加
Accept: application/json
header请求。
在 java 中,执行此操作的选项很少,其中之一可能是
package com.demo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/users")
public class JsonFromRestful
{
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public Customer produceCustomerDetailsinJSON() {
Customer cust = new Customer();
cust.setCustNo(1);
cust.setCustName("demo");
cust.setCustCountry("poland");
return cust;
}
}
我通过使用 "Web" activity 而不是 "Azure Function" activity.
解决了这个问题
在网页activity中,需要输入完整的URL,因此需要手动参数化Azure Function baseURL和访问码,否则体验非常相似并且可能更灵活。
API 响应的内容包含在 JSON 属性 "Response" 中。即
{
"Response": "[{\"campaign_name\":\"Interactive Support\",\"campaign_end\":\"26/01/2020\"}]",
"ADFWebActivityResponseHeaders": {
"Request-Context": "appId=cid-v1:691579a9-cebe-4c49-9301-99463f150d13",
"Date": "Wed, 25 Mar 2020 17:45:27 GMT"
},
...
}
然后可以使用 @json(activity('YourWebActivity').output.Response)
提取
请检查您的 returning 值。因为有时需要额外的强制转换(C# 上的下一个示例):
return (ActionResult)new OkObjectResult( new {Result = response.StatusCode.ToString()});
如果我们return简单的字符串或数值是行不通的。
希望对您或其他人有所帮助。
我的 ADF 管道调用 Azure 函数(用 Java 编写)。
但是,管道失败并显示此消息:
Response Content is not a valid JObject.
我四处寻找,但似乎无法在 Java 中找到 JObject 的任何示例。
谁能告诉我如何做到这一点?
您只需要一个 JSON object return 函数。
{
"name": "adam"
}
不幸的是,如果你 return object 数组,虽然它是正确的 JSON 符号,但它会失败并出现 Response Content is not a valid JObject.
错误。
所以
[{
"name": "adam"
}, {
"name": "tom"
}]
Return 类似
{
"items": [{
"name": "adam"
}, {
"name": "tom"
}]
}
根据 API,您可能需要添加
Accept: application/json
header请求。
在 java 中,执行此操作的选项很少,其中之一可能是
package com.demo;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/users")
public class JsonFromRestful
{
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public Customer produceCustomerDetailsinJSON() {
Customer cust = new Customer();
cust.setCustNo(1);
cust.setCustName("demo");
cust.setCustCountry("poland");
return cust;
}
}
我通过使用 "Web" activity 而不是 "Azure Function" activity.
解决了这个问题在网页activity中,需要输入完整的URL,因此需要手动参数化Azure Function baseURL和访问码,否则体验非常相似并且可能更灵活。
API 响应的内容包含在 JSON 属性 "Response" 中。即
{
"Response": "[{\"campaign_name\":\"Interactive Support\",\"campaign_end\":\"26/01/2020\"}]",
"ADFWebActivityResponseHeaders": {
"Request-Context": "appId=cid-v1:691579a9-cebe-4c49-9301-99463f150d13",
"Date": "Wed, 25 Mar 2020 17:45:27 GMT"
},
...
}
然后可以使用 @json(activity('YourWebActivity').output.Response)
请检查您的 returning 值。因为有时需要额外的强制转换(C# 上的下一个示例):
return (ActionResult)new OkObjectResult( new {Result = response.StatusCode.ToString()});
如果我们return简单的字符串或数值是行不通的。 希望对您或其他人有所帮助。