Mac*_*der 5 java rest json http rest-assured
让我们假设我有以下模型:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MyModel {
private Object field; //required field
private Object anotherField; //optional field
}
Run Code Online (Sandbox Code Playgroud)
现在我想验证我的 REST 端点是否正常工作(只需要必填字段),所以我想执行以下 2 个请求并检查它们是否导致 200:
{
"field": "someValue",
"anotherField": null
}
Run Code Online (Sandbox Code Playgroud)
和:
{
"field": "someValue"
}
Run Code Online (Sandbox Code Playgroud)
第一个,代码很简单:
MyModel payload = MyModel.builder().field("someValue").build();
when().contentType(ContentType.JSON).body(payload).put("http://my-service.com/myendpoint/").then().statusCode(200);
Run Code Online (Sandbox Code Playgroud)
但第二个开始有点蹩脚。如果我不为 提供值anotherField,默认情况下它将为空,这就是将通过 REST(第一个 TC)发送的内容。但此刻我不想发送这个字段。换句话说:
nulls. 有什么方法可以实现吗?如果您使用的是 Jackson 库:
@JsonInclude(Include.NON_NULL)
Run Code Online (Sandbox Code Playgroud)
使用此注释可以指定简单的排除规则以减少要写出的属性数量
问题解决了。经过一番调查后,我发现有两种解决此问题的方法:
自定义 resassured 使用的映射器:如何访问 REST Assured 中的底层 Jackson ObjectMapper?
在发送之前将我的对象序列化为字符串。
我选择了第二个选项:
String payload;
//send model WITHOUT nulls
payload = new Gson().toJson(MyModel.builder().field("someValue").build());
when().contentType(ContentType.JSON).body(payload).put("http://my-service.com/myendpoint/").then().statusCode(200);
//send model WITH nulls
payload = new GsonBuilder().serializeNulls().create().toJson(MyModel.builder().field("someValue").build());
when().contentType(ContentType.JSON).body(payload).put("http://my-service.com/myendpoint/").then().statusCode(200);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2780 次 |
| 最近记录: |