如何使用Jersey客户端POST方法提交数据

我是泽西岛的新手。 我需要实现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 

所以我试图弄清楚如何使用Jersey客户端来实现上面的curl命令。

到目前为止我做了:

 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(); } } } 

有人可以帮我吗?

现在我明白了。 这是我的解决方案:

 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(); } } 

如果你想在JSON体内发布,这是一个更好的方法。

 ClientConfig clientConfig = new DefaultClientConfig(); clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); client = Client.create(clientConfig); WebResource webResource = client.resource(baseuri); Map postBody = new HashMap(); //put switch, name,priority.... ClientResponse response = webResource.accept("application/json") .type("application/json").post(ClientResponse.class, postBody); 

记住你必须包括jersey-json

对于未来的用户来说,随着新版本的jersey事情发生了变化,所以做这种POST方法的方法是:

  • 对于版本1.x ( @Li’ 回答 ):

     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)); 

基于迁移指南