JsonPathResultMatchers не может успешно проверить ответ

Почему JsonPathResultMatchers не может успешно проверить ответ? Контрольная работа

private static final UUID TRANSACTION_UUID_ONE = UUID.fromString("336ca9de-1583-4f39-9c67-f8380323d09d");

restBalanceMockMvc.perform(put("/api/balance")
        .contentType(TestUtil.APPLICATION_JSON_UTF8)
        .content(TestUtil.convertObjectToJsonBytes(transaction)))
        .andExpect(status().isOk())
        .andExpect(jsonPath("$.transactionId").value(hasItem(TRANSACTION_UUID_ONE.toString())))
        .andExpect(jsonPath("$.errorCode").value(hasItem("")))
        .andExpect(jsonPath("$.balanceVersion").value(hasItem(UPDATED_BALANCE_VERSION)))
        .andExpect(jsonPath("$.balanceChange").value(hasItem(BALANCE_CHANGE)))
        .andExpect(jsonPath("$.balanceAfterChange").value(hasItem(BALANCE_AFTER_CHANGE)));

Ответ:

{"username":"player1","transactionId":"336ca9de-1583-4f39-9c67-f8380323d09d","balanceChange":2,"errorCode":"","balanceVersion":1,"balanceAfterChange":5.00}

Ошибка

java.lang.AssertionError: JSON path "$.transactionId"
Expected: a collection containing "336ca9de-1583-4f39-9c67-f8380323d09d"
     but: was "336ca9de-1583-4f39-9c67-f8380323d09d"
Expected :a collection containing "336ca9de-1583-4f39-9c67-f8380323d09d"

Actual   :"336ca9de-1583-4f39-9c67-f8380323d09d"
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
69
1

Ответы 1

JsonPathResultMatchers.value () ожидает, что Hamcrest Matcher оценит значение.

hasItem () определяется следующим образом:

Creates a matcher for Iterables that only matches when a single pass over the examined Iterables yields at least one item that is equal to the specified item.

transactionId в вашем JSON - это обычная строка, а не коллекция, поэтому здесь нельзя использовать hasItem().

Попробуйте с

jsonPath("$.transactionId").value(equalTo(TRANSACTION_UUID_ONE.toString()))

или просто

jsonPath("$.transactionId").value(TRANSACTION_UUID_ONE.toString())

Другие вопросы по теме