如何将两个不同的对象传递给邮递员中的 POST 请求以测试 RESTful API?
Posted
技术标签:
【中文标题】如何将两个不同的对象传递给邮递员中的 POST 请求以测试 RESTful API?【英文标题】:How to pass two different objects to a POST request in postman to test RESTful API? 【发布时间】: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;
我在 *** 和 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 对象以及如何传递它?
【问题讨论】:
【参考方案1】:您的 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 对象(不是 [])
【讨论】:
【参考方案2】:而不是在正文中这样做:
[client, address]
用这个替换它:
requestBody
现在,将完整的主体存储在环境变量中。 删除客户端和地址的单独变量,只使用一个变量。
因此,请将您的预请求脚本更新为如下内容:
pm.environment.set("requestBody", JSON.stringify([client, address]));
【讨论】:
如果这没有帮助,然后打开 Postman 控制台(查看 > Postman 控制台),现在发送请求并分享作为请求发出的 RequestBody 的屏幕截图。 不幸的是没有用。请点击此链接获取输出截图:imgur.com/a/WejRrR6 哦,所以请求正文是正确的。服务器代码有问题,也许其他响应会帮助您。以上是关于如何将两个不同的对象传递给邮递员中的 POST 请求以测试 RESTful API?的主要内容,如果未能解决你的问题,请参考以下文章
如何将json POST数据作为对象传递给Web API方法?
如何将类型的对象作为参数传递给Web Api Get / Post方法