禁止在运行时通过 Rest Assured 发送空字段
Disable sending null fields via Rest Assured in runtime
假设我得到以下模型:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MyModel {
private Object field; //required field
private Object anotherField; //optional field
}
现在我想验证我的 REST 端点是否正常工作(只需要必填字段),所以我想执行以下 2 个请求并检查它们是否导致 200:
{
"field": "someValue",
"anotherField": null
}
和:
{
"field": "someValue"
}
用第一个,代码简单:
MyModel payload = MyModel.builder().field("someValue").build();
when().contentType(ContentType.JSON).body(payload).put("http://my-service.com/myendpoint/").then().statusCode(200);
但是第二个开始有点蹩脚了。如果我不为 anotherField
提供值,默认情况下它将为空,这就是将通过 REST(第一个 TC)发送的内容。但是此时我不想发送这个字段。换句话说:
我希望 RestAssured 不要发送 nulls
。有什么办法可以实现吗?
问题在这里:private Object anotherField; //可选字段.
您尚未将此 属性 定义为 可空类型 。根据您的代码,它是必填字段,不可空类型。您必须添加 数据注释 以将其定义为可空类型。
如果您使用的是 Jackson 库:
@JsonInclude(Include.NON_NULL)
using this annotation one can specify simple exclusion rules to reduce
amount of properties to write out
问题已解决。经过一些调查后,我看到了解决此问题的两种方法:
定制放心使用的映射器:How do I access the underlying Jackson ObjectMapper in REST Assured?
发送前将我的对象序列化为字符串。
我选择了第二个选项:
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);
假设我得到以下模型:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MyModel {
private Object field; //required field
private Object anotherField; //optional field
}
现在我想验证我的 REST 端点是否正常工作(只需要必填字段),所以我想执行以下 2 个请求并检查它们是否导致 200:
{
"field": "someValue",
"anotherField": null
}
和:
{
"field": "someValue"
}
用第一个,代码简单:
MyModel payload = MyModel.builder().field("someValue").build();
when().contentType(ContentType.JSON).body(payload).put("http://my-service.com/myendpoint/").then().statusCode(200);
但是第二个开始有点蹩脚了。如果我不为 anotherField
提供值,默认情况下它将为空,这就是将通过 REST(第一个 TC)发送的内容。但是此时我不想发送这个字段。换句话说:
我希望 RestAssured 不要发送 nulls
。有什么办法可以实现吗?
问题在这里:private Object anotherField; //可选字段.
您尚未将此 属性 定义为 可空类型 。根据您的代码,它是必填字段,不可空类型。您必须添加 数据注释 以将其定义为可空类型。
如果您使用的是 Jackson 库:
@JsonInclude(Include.NON_NULL)
using this annotation one can specify simple exclusion rules to reduce amount of properties to write out
问题已解决。经过一些调查后,我看到了解决此问题的两种方法:
定制放心使用的映射器:How do I access the underlying Jackson ObjectMapper in REST Assured?
发送前将我的对象序列化为字符串。
我选择了第二个选项:
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);