2015-11-01 5 views
0

Как избежать квадратных скобок в JSONPath?Как избежать [] в jsonPath

.andExpect(jsonPath("$.fieldErrors.addresses[0].contactAddress1", Matchers.any(String.class)))

не соответствует, даже если JSON существует, и я думаю, что это из-за квадратные скобки.

"{\"errors\":[],\"fieldErrors\":{\"adminName\":\"Admin Name is a required field\",\"addresses[0].contactCompany\":\"Company is a required field\",\"addresses[0].contactAddress1\":\"Address is a required field\",\"addresses[0].contactPhoneNumber\":\"Phone Number cannot exceed 25 characters\"},\"uiMessageClass\":null,\"uiMessage\":null,\"redirectUrl\":null,\"object\":null}"

Есть ли способ избежать скобки?

ответ

0

fieldErrors не содержит свойства с именем addresses, которое представляет собой массив или список. Таким образом, вы используете неправильный синтаксис.

Вы пробовали просто процитировать название собственности, как это?

.andExpect(jsonPath("$.fieldErrors['addresses[0].contactAddress1']", Matchers.any(String.class))) 

Для получения более подробной информации, обратитесь к официальной документации JsonPath.

Я также опробовал ваш дополнительный сбойный тест, который вы обсуждаете в комментариях, но я не могу воспроизвести проблему. Например, следующий тест проходит нормально для меня:

@Test 
public void test() { 
    String input = "{\"errors\":[],\"fieldErrors\":{\"labels[en]\":\"Label is a required field\",\"externalIdentifier\":\"Identifier is a required field\"},\"uiMessageClass\":null,\"uiMessage\":null,\"redire‌​ctUrl\":null,\"objec‌​t\":null}"; 
    JsonPathExpectationsHelper jsonPath = new JsonPathExpectationsHelper("$.fieldErrors['labels[en]']"); 
    jsonPath.exists(input); 
    jsonPath.assertValue(input, Matchers.any(String.class)); 
    jsonPath.assertValue(input, "Label is a required field"); 
} 

С уважением,

Sam

+0

Hi Sam Я просто попытался это на другом методе испытания с аналогичными свойствами. Но я получил эту ошибку: 'java.lang.AssertionError: JSON path" $ .fieldErrors ['labels [en]'] " Ожидаемое: экземпляр java.lang.String , но: <{}> - это java.util.LinkedHashMap \t в org.hamcrest.MatcherAssert.assertThat (MatcherAssert.java:20) \t в org.springframework.test.util.JsonPathExpectationsHelper.assertValue' –

+0

это выход JSON: 'testUpdateShippingMethod_CreateNew_InvalidInput - "{\" ошибки \": [], \ "fieldErrors \": {\ "labels [en] \": \ "Ярлык - обязательное поле \", \ "externalIdentifier \": \ "Идентификатор - обязательное поле \"}, \ "uiMessageClass \ ": null, \" uiMessage \ ": null, \" redirectUrl \ ": null, \" object \ ": null}" 13: 02: 13.426 TRACE com.ocscommerce.admin.tests.unit.controllers.deliveries. ShippingMethodAjaxControllerUnitTest 305 testUp dateShippingMethod_CreateNew_InvalidInput - exit' –

+0

и совпадение: '.andExpect (jsonPath (" $. fieldErrors ['labels [en]'] ", Matchers.any (String.class))) ' –

Смежные вопросы