Как сделать запрос https? - PullRequest
0 голосов
/ 15 марта 2019

Я должен сделать запрос по адресу и отправить json, json у меня в виде модели

public class RequestToPlanfix {
    private String cmd;
    private String providerId;
    private String channel;
    private String chatId;
    private String planfix_token;
    private String message;
    private String title;
    private String contactId;
    private String contactName;
    private String contactLastName;
    private String contactIco;
    private String contactEmail;
    private String contactPhone;
    private String contactData;
    @Convert(converter = Attachments.class)
    private Map<String,String> name;
    @Convert(converter = Attachments.class)
    private Map<String,String> url;
    private Boolean isEcho;
}

, то есть я должен отправить json через https, поля которого соответствуют полям этой сущностиКак я могу получить и перевести эту сущность в JSON?Как я могу сделать запрос https дальше?

, тогда я получу ответ в виде json, поля которого являются полями следующего объекта

, то есть я получуjson и я должны сделать это:

public class RequestFromPlanfix {
    private String cmd;
    private String providerId;
    private String chatId;
    private String contactPhone;
    private String channel;
    private String token;
    private String message;
    private String userName;
    private String userLastName;
    private String userIco;
    private String taskEmail;
    @Convert(converter = Attachments.class)
    private Map<String,String> name;
    @Convert(converter = Attachments.class)
    private Map<String,String> url;
}

поля в двух случаях различны в некоторых местах, поэтому я создал две сущности, затем, когда мы отправим запрос, мы отправим первый json, а когда получимответ второй JSON, я не могу понять, как сделать запрос и связать JSON с сущностью, спасибо

enter image description here

   String postUrl = "www.site.com";
    Gson gson = new Gson();
    HttpClient httpClient = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost(postUrl);
    StringEntity postingString = new StringEntity(gson.toJson(requestToPlanfix));//gson.tojson() converts your pojo to json
    post.setEntity(postingString);
    post.setHeader("Content-type", "application/json");
    HttpResponse response = httpClient.execute(post);

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Так что вам нужно сделать HTTP POST звонок.

И, как объясняется, ваше request тело выглядит как RequestToPlanfix.java, а ожидаемое Response будет похоже на RequestFromPlanfix.java.

Кроме того, вы используете GSON для преобразования.

Теперь я посоветую вам переопределить ваши модели (RequestToPlanfix.java & RequestFromPlanfix.java) как:

  • Перейти к: http://www.jsonschema2pojo.org/

  • Сначала вставьте свой запрос JSON и выберите GSON, Java, а также любое дополнительное поле, которое вы считаете правильным.

  • Затем сгенерируйте оттуда ваши простые старые объекты Java.
  • Таким образом, мы уверены, что в нашем понимании JSON - JAVA нет ничего плохого.
  • Аналогично, на основе ожидаемого response JSON создайте RequestFromPlanfix.java.
  • Замените существующие POJO на сгенерированные выше.

Теперь давайте сделаем HTTP call, используя Spring's RestTemplate:

public class MakeRestCall {

  @Autowired
  private RestTemplate restTemplate;

  public void getResponse(){

      String postUrl = "www.site.com";

      // get your request object ready
      RequestToPlanfix requestObject = getRequestObject();

      // initialize HttpEntity 
      HttpEntity<RequestToPlanfix> httpEntity = new HttpEntity<>(requestObject);
      ResponseEntity<RequestFromPlanfix> response = restTemplate.exchange(postUrl, HttpMethod.POST, httpEntity, RequestFromPlanfix.class);
      RequestFromPlanfix responseObject = response.getBody();
      // carry-on with your other stuff
    }

Надеюсь, это поможет.

0 голосов
/ 15 марта 2019

Вы можете использовать RestTemplate.

Что-то вроде:

@Test 
public void test() throws URISyntaxException {
    RestTemplate restTemplate = new RestTemplate();

    final String baseUrl = "https://your_url!";
    final URI uri = new URI(baseUrl);

    final RequestToPlanfix requestToPlanfix = new RequestToPlanfix();
    // set fields here to requestToPlanfix 

    final ResponseEntity<RequestFromPlanfix> result = restTemplate.postForEntity(uri, requestToPlanfix, String.class);

    // your response 
    final RequestFromPlanfix requestFromPlanfix = result.getBody();

    //Verify request succeed
    Assert.assertEquals(200, result.getStatusCodeValue()); 
 }

Другие примеры вы можете найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...