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简单的字符串或数值是行不通的。 希望对您或其他人有所帮助。