На самом деле это вопрос, состоящий из двух частей: один - как передать два объекта 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 и как его передать?