Java 如何使用 Jersey 客户端 POST 方法提交数据
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16284743/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to submit data with Jersey client POST method
提问by Li'
I am new to Jersey. I need to implement a Jersey client to submit data with POST method. The curl command is:
我是泽西岛的新手。我需要实现一个 Jersey 客户端来使用 POST 方法提交数据。curl 命令是:
curl -d '{"switch": "00:00:00:00:00:00:00:01", "name":"flow-mod-1", "priority":"32768", "ingress-port":"1","active":"true", "actions":"output=2"}' http://localhost:8080/wm/staticflowentrypusher/json
So I am trying to figure out how to use Jersey client to implement the above curl command.
所以我想弄清楚如何使用 Jersey 客户端来实现上面的 curl 命令。
So far I have done:
到目前为止,我已经做了:
public class FLClient {
private static Client client;
private static WebResource webResource;
private static String baseuri = "http://localhost:8080/wm/staticflowentrypusher/json";
private static ClientResponse response;
private static String output = null;
public static void main(String[] args) {
try {
client = Client.create();
webResource = client.resource(baseuri);
// implement POST data
} catch (Exception e) {
e.printStackTrace();
}
}
}
Can someone help me with it?
有人可以帮我吗?
采纳答案by Li'
Now I figure it out. Here is my solution:
现在我想通了。这是我的解决方案:
public static void main(String[] args) {
try {
Client client = Client.create();
WebResource webResource = client.resource(baseuri);
String input = "{\"switch\": \"00:00:00:00:00:00:00:01\", "
+ "\"name\":\"flow-mod-1\", \"priority\":\"32768\", "
+ "\"ingress-port\":\"1\",\"active\":\"true\", "
+ "\"actions\":\"output=2\"}";
// POST method
ClientResponse response = webResource.accept("application/json")
.type("application/json").post(ClientResponse.class, input);
// check response status code
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
// display response
String output = response.getEntity(String.class);
System.out.println("Output from Server .... ");
System.out.println(output + "\n");
} catch (Exception e) {
e.printStackTrace();
}
}
回答by Willy
If you want to post within a JSON body, here is a better approach.
如果您想在 JSON 正文中发布,这里有一个更好的方法。
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
client = Client.create(clientConfig);
WebResource webResource = client.resource(baseuri);
Map<String,Object> postBody = new HashMap<String,Object>();
//put switch, name,priority....
ClientResponse response = webResource.accept("application/json")
.type("application/json").post(ClientResponse.class, postBody);
Remember you have to include jersey-json
记住你必须包括 jersey-json
回答by Ohad Eytan
For future users, with the new version of jersey
things has changed, so the way of doing such POST method is:
对于未来的用户来说,随着新版本的jersey
事情发生了变化,所以做这样的POST方法的方式是:
For versions
1.x
(@Li'answer) :WebResource webResource = client.resource(baseuri); String input = "..."; ClientResponse response = webResource.accept("application/json") .type("application/json").post(ClientResponse.class, input);
For versions
2.x
:WebTarget webTarget = client.target(baseuri); String input = "..."; Response response = webTarget.request("application/json").post(Entity.json(input));
WebResource webResource = client.resource(baseuri); String input = "..."; ClientResponse response = webResource.accept("application/json") .type("application/json").post(ClientResponse.class, input);
对于版本
2.x
:WebTarget webTarget = client.target(baseuri); String input = "..."; Response response = webTarget.request("application/json").post(Entity.json(input));
Based on the Migration Guide
基于迁移指南