IBM MF8适配器混搭 - POST请求

时间:2016-09-05 13:05:20

标签: java ibm-mobilefirst apache-httpcomponents

我在IBM MF8 Java适配器中尝试了一个用于发布请求的示例。

在这个适配器中,我试图调用另一个Java适配器,SampleAdapter,并希望以userDetails作为参数进行POST

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/balanced")
@OAuthSecurity(enabled = false)
public JSONObject generate(UserDetails userDetails , HttpRequest request,  HttpSession session) throws UnsupportedEncodingException {

    String messages = null;

    String getProcedureURL = "/SampleAdapter/resource";
    StringEntity requestEntity = new StringEntity(userDetails.toString(),ContentType.APPLICATION_JSON);

    HttpPost httpPost = new HttpPost(getProcedureURL);
    httpPost.setEntity(requestEntity);
    JSONObject jsonObj = null;

    HttpResponse response;
    try {

        response = adaptersAPI.executeAdapterRequest(httpPost);
        jsonObj = adaptersAPI.getResponseAsJSON(response);
        messages = (String)jsonObj.get("subscriptionMessage");

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    JSONObject json = new JSONObject();
    json.put("value", messages);

    return json;
}

SampleAdapter必须获取对象userDetails。这样我就可以在后端使用它进行某些操作。

但是,在这里我无法将数据导入SampleAdapter。另外,我尝试从SampleAdapter返回一些String。

我收到以下错误

{"responseText":"","error":"Response cannot be parsed to JSON"}

我知道IBM MF在内部进行了json转换,但是在这里如何从一个适配器到适配器进行POST。 我看到仅为GET请求提供的示例。 有关POST的建议吗?

1 个答案:

答案 0 :(得分:1)

我给你写了一个基于你的简短例子:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/balanced")
@OAuthSecurity(enabled = false)
public JSONObject generate() throws UnsupportedEncodingException {

    String messages = null;

    String getProcedureURL = "/SampleAdapter/resource/hello";
    StringEntity requestEntity = new StringEntity("world", ContentType.APPLICATION_JSON);

    HttpPost httpPost = new HttpPost(getProcedureURL);
    httpPost.setEntity(requestEntity);
    JSONObject jsonObj = null;

    HttpResponse response;
    try {

        response = adaptersAPI.executeAdapterRequest(httpPost);
        jsonObj = adaptersAPI.getResponseAsJSON(response);
        messages = "Hello " + (String)jsonObj.get("name");

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    JSONObject json = new JSONObject();
    json.put("value", messages);

    return json;
}

这是POST端点:

@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/hello")
@OAuthSecurity(enabled = false)
public Map<String, String> hello(String name) {
    Map<String, String> result = new HashMap<String, String>();
    result.put("name", name);
    return result;
}

我希望这会对你有所帮助。