Как передать два разных объекта в запрос POST в почтальоне для проверки RESTful API? - PullRequest
2 голосов
/ 27 мая 2019

На самом деле это вопрос, состоящий из двух частей: один - как передать два объекта JSON, другой - как создать объект из двух разных классов и передать этот объект в метод POST.

Я пытаюсь протестировать POST-метод RESTful API, передав два разных объекта в почтальон. Я мог успешно протестировать только POST-метод с одним объектом, но когда я пытаюсь отправить два разных объекта в POST-метод, где два разных объекта, почтальон говорит, что неправильный запрос.

Вот мой класс двух сущностей: Первый класс Клинта:

import lombok.Data;
import org.zevgma.api.entities.user.User;

import javax.persistence.*;
import java.util.Date;

@Data
@Entity
@Table(name = "client")
public class Client {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_pk_generator")
    @SequenceGenerator(name = "user_pk_generator", sequenceName = "users_user_id_seq", allocationSize = 1)
    @Column(name = "id", unique = true, nullable = false,  columnDefinition = "serial")
    private int id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(nullable = false)
    private String email;

    @Column(nullable = false)
    private Date userDateCreate;

 }

Второй - это адрес клиента:

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Data
@Entity
public class ClientAddress {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private int streetID;
    private String streetName;
    private int streetNumber;
}

Я пробовал другой запрос POST с объектами JSON или вложенными потоками JSON в Stackoverflow и YouTube, но не смог найти свое решение. Специально я попробовал инструкции из этих тем:

Вот метод POST RESTful API, который я хочу протестировать:

@PostMapping(value = "/api/employees", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> createClient(@RequestBody Client client,
                                           @RequestBody ClientAddress clientAddress){
    clientService.save(client);
    clientAddressService.save(clientAddress);
    return new ResponseEntity<>(client.getName() + " and "+ clientAddress.getStreetName() + " successfully added",
            HttpStatus.OK);
}

До сих пор я пытался с этим объектом JSON:

[
{
     "name": "Bilbo",
      "email": "bilbo@gmail.com"
    },
		
  {
     "streetName": "Central Street",
     "streetNumber": "31"
   }
]

[
	{
		"client":{
               "name": "Bilbo",
                "email": "bilbo@gmail.com"
              },
		
		"clientAddress":{
                      "streetName": "Central Street",
                      "streetNumber": "31"
                     }
	  }
]

По сценарию предварительного запроса:

 //Pre-request Script
 var client = {
     "name": "Bilbo",
     "email": "bilbo@mail.com"
 }

var address = {
    "streetName": "New Street",
    "streetNumber": "3"
}

pm.environment.set("client", JSON.stringify(client));
pm.environment.set("address", JSON.stringify(address));

//Body
[
{{client}},{{address}}	
]

Теперь вторая часть вопросов: Что, если я хочу создать новый объект ClientData из двух упомянутых выше классов Client и ClientAddress и передать этот объект ClientData в метод POST, как это сделать.

Вот класс ClientData:

импорт ломбок.Данные;

@Data
public class ClientData {

    private Client client;
    private ClientAddress address;
}

А вот метод POST, в котором я хочу передать объект ClientData:

  @PostMapping(value = "/api/employees", consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<String> createClient(@RequestBody ClientData clientData){
               Client client = clientData.getClient();
                clientService.save(client);
            ClientAddress clientAddress = clientData.getAddress();
            clientAddressService.save(clientAddress);

        return new ResponseEntity<>(client.getName() + " and "+ clientAddress.getStreetName() + " successfully added",
                HttpStatus.OK);
    }

Чтобы протестировать метод в почтальоне, я должен создать этот сложный объект JSON ClientData и как его передать?

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Ваш класс ClientData

@Data
public class ClientData {

    private Client client;
    private ClientAddress address;
}

Итак, вы запрашиваете полезную нагрузку, которая должна выглядеть как

    {
        "client":{
               "name": "Bilbo",
                "email": "bilbo@gmail.com"
              },

        "address":{
                      "streetName": "Central Street",
                      "streetNumber": "31"
                     }
      }

Обратите внимание на адрес вместо clientAddress. Также вам не нужно передавать его как массив, это будет просто объект json (не [])

0 голосов
/ 27 мая 2019

Вместо этого в теле:

[{{client}}, {{address}}]

Замените его следующим:

{{requestBody}}

Теперь сохраните полное тело в переменной окружения. Удалите отдельные переменные для клиента и адреса и просто используйте одну переменную.

Итак, обновите ваш скрипт предварительного запроса до следующего вида:

pm.environment.set("requestBody", JSON.stringify([client, address]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...