Проблема с сериализацией JSON: InvalidDefinitionException: - PullRequest
0 голосов
/ 02 июня 2018

У меня есть сценарий, в котором мне нужно выполнить сценарий отрицательного теста.

Это вызов 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();

ЗАГРУЗИТЬ: Обязательные атрибутыв полезной нагрузке:

firstname, lastname and email

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

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

Пробовал R & D много конфигов, но без радости

например

mapper.disable (SerializationFeature.FAIL_ON_EMPTY_BEANS);

Может кто-топожалуйста, укажите любое направление?

1 Ответ

0 голосов
/ 02 июня 2018

Джексон, похоже, не может сериализовать JSONObject, который вы пытаетесь передать как тело.Почему бы вам не попытаться преобразовать его обратно в строку после удаления ненужных полей?

...