Как отправить данные с помощью метода POST клиента
Я новичок в Джерси. Мне нужно внедрить клиента Джерси для отправки данных методом 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
Итак, я пытаюсь выяснить, как использовать клиент Джерси для реализации указанной выше команды 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();
}
}
}
Может кто-нибудь мне помочь?
Ответы
Ответ 1
Теперь я понял это. Вот мое решение:
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();
}
}
Ответ 2
Если вы хотите опубликовать текст в теле 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
Ответ 3
Для будущих пользователей с новой версией 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));
На основе Руководство по миграции