【问题标题】:Disable sending null fields via Rest Assured in runtime在运行时禁用通过 Rest Assured 发送空字段
【发布时间】:2017-07-10 11:56:58
【问题描述】:

假设我得到了以下模型:

@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。有什么方法可以实现吗?

【问题讨论】:

    标签: java json rest http rest-assured


    【解决方案1】:

    如果您使用的是 Jackson 库:

    @JsonInclude(Include.NON_NULL)
    

    使用这个注解可以指定简单的排除规则来减少 要写出的属性数量

    【讨论】:

      【解决方案2】:

      问题已解决。经过一番调查,我看到了两种解决此问题的方法:

      1. 自定义 reassured 使用的映射器:How do I access the underlying Jackson ObjectMapper in REST Assured?

      2. 在发送之前将我的对象序列化为字符串。

      我选择了第二个选项:

      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);
      

      【讨论】:

        【解决方案3】:

        问题出在这里:private Object anotherField; //可选字段.

        您尚未将此属性定义为可为空的类型。根据您的代码,它是必填字段,不可为空类型。您必须添加数据注释以将其定义为可为空的类型。

        【讨论】:

          猜你喜欢
          • 2014-09-30
          • 1970-01-01
          • 2015-01-15
          • 2018-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多