【发布时间】:2019-10-12 20:51:48
【问题描述】:
这实际上是一个两部分的问题,一个是如何传递两个 JSON 对象,另一个是如何从两个不同的类创建对象并将该对象传递给 POST 方法。
我正在尝试通过在邮递员中传递两个不同的对象来测试 RESTful API 的 POST 方法。我只能用一个对象成功测试 POST 方法,但是当我尝试将两个不同的对象发送到两个不同对象的 POST 方法时,邮递员说是错误的请求。
这是我的两个实体类:第一个是 Cleint 类:
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;
}
第二个是关于ClientAddress的:
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;
}
我在 Stackoverflow 和 youtube 中尝试了使用 JSON 对象或 JSON 嵌套线程的不同 POST 请求,但找不到我的解决方案。 特别是我已经尝试过这些线程的说明:
- https://it.mathworks.com/help/thingspeak/bulkwritejsondata.html
- Post Multiple JSON Objects Simultaneously with Express and Postman
这是我要测试的 RESTful API 的 POST 方法:
@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}}
]
现在问题的第二部分:如果我想从上面提到的两个类 Client 和 ClientAddress 创建一个新对象 ClientData 并将这个 ClientData 对象传递给一个 POST 方法,该怎么做。
这是 ClientData 类:
导入 lombok.Data;
@Data
public class ClientData {
private Client client;
private ClientAddress address;
}
这是我要传递 ClientData 对象的 POST 方法:
@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);
}
要在邮递员中测试方法,我应该创建这些复杂的 ClientData JSON 对象以及如何传递它?
【问题讨论】:
标签: json rest spring-boot postman