【问题标题】:PHP RESTful API accessing Jersey Client POST dataPHP RESTful API 访问 Jersey 客户端 POST 数据
【发布时间】:2015-12-08 05:11:31
【问题描述】:

我正在使用 PHP RESTful API,该 API 由使用 jersey 2.21 的 Java 桌面应用程序使用。

通常,当我从 AngularJS 发送 POST 请求时,我可以通过以下方式访问数据:

$data = json_decode(file_get_contents("php://input"));

但是,当我使用 jersey 时,数据被放入 $_POST 数组中。这是我的泽西代码:

final HashMap<String, String> params = // some hashmap with a few entries
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
MultivaluedMap formData = new MultivaluedHashMap(params);

WebTarget target = client.target(url);


// Get JSON
String jsonResponse = target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED_TYPE), String.class);

return jsonResponse;

如何从 Jersey 发布数据,以便我可以通过上述 PHP 调用访问它?

我知道我可以只使用$_POST 数组,但我需要在移动应用、Java 桌面和 AngularJS 应用中使用此 API。

提前致谢

【问题讨论】:

  • 猜测提示。你的问题是MediaType.APPLICATION_FORM_URLENCODED_TYPE
  • 嘿@JonStirling,我认为这与标题有关。现在想弄清楚如何设置 JSON 标头。
  • 再次猜测(我不使用 java,更不用说 Jersey),但您可能在 MediaType.APPLICATION_JSON_TYPE 之后,假设您实际上传递的是 JSON,这是您的 PHP 应用程序所期望的。
  • 你说得对,我把它修好了。谢谢

标签: java php rest jersey jersey-2.0


【解决方案1】:

感谢@jonstirling,我明白了。

我必须将内容类型设置为 JSON。这是更新的代码:

ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);

WebTarget target = client.target(url);

String data = new Gson().toJson(params);

// POST JSON
Entity json = Entity.entity(data, MediaType.APPLICATION_JSON_TYPE);
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
String jsonResponse = builder.post(json, String.class);

return jsonResponse;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 2013-08-22
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多