首页 > 解决方案 > JSON 序列化问题:InvalidDefinitionException:

问题描述

我有一个场景,我需要执行一个否定的测试场景。

这是一个更新客户对象的 PUT 调用。

我需要将对象转换为 JSON,并在应用于有效负载之前删除强制属性。

现在,当我提供一个缺少属性的有效负载时,我期待 400 响应和错误消息。

我使用了以下代码,但有 InvalidDefinitionException

错误

  com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) 

代码:

  UpdateCustomerModel updateCustomerModel = new UpdateCustomerModel()
    updateCustomerModel.setFirstName("abc");
    updateCustomerModel.setLastName("abc");
    updateCustomerModel.setEmail("a@a.com");

    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writeValueAsString(updateCustomerModel);

    JSONObject updateCustomerJson = new JSONObject(json);

    updateCustomerJson.getJSONObject("customer").remove("email");

    Response response =
     given().filter(new RequestLoggingFilter(this.requestCapture))

     .header("Authorization", getSession().getToken()).body(updateCustomerJson)
     .body(updateCustomerJson)
     .when()
     .put(Resource.updateCustomer)
     .then()
     .extract().response();

PAYLOAD: 有效载荷中的强制性属性是;

firstname, lastname and email

{
    "customer": {
        "id": null,
        "firstname": "Chuck",
        "lastname": "Patterson",
        "store_id": null,
        "website_id": 1,
        "addresses": [

        ],
        "default_billing": null,
        "default_shipping": null
    }
}

尝试研发许多配置,但没有乐趣

例如

mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

有人可以指出任何方向吗?

标签: javajsonjacksonrest-assured

解决方案


杰克逊似乎无法序列化JSONObject你试图作为身体传递的东西。删除不需要的字段后,为什么不尝试将其转换回字符串?


推荐阅读