web-dev-qa-db-ja.com

Jerseyクライアントでデータを送信する方法POSTメソッド

私はジャージーに新しいです。 POSTメソッドを使用してデータを送信するJerseyクライアントを実装する必要があります。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

そこで、上記のcurlコマンドを実装するためにJerseyクライアントを使用する方法を見つけようとしています。

これまでに私がやったこと:

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

}

誰かがそれを手伝ってくれますか?

23
Li'

今私はそれを理解します。私の解決策は次のとおりです。

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

}
30
Li'

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

jersey-jsonを含める必要があることを忘れないでください

20
Willy

将来のユーザーのために、新しいバージョンのjerseyが変更されたため、このようなPOSTメソッドの実行方法は次のとおりです。

  • バージョンの場合1.x@ Li 'answer ):

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

移行ガイド に基づく

8
Ohad Eytan