daniele daniele - 22 days ago 15
JSON Question

JsonPath JUnit escape character for dots

I have a json field which is called template.welcome.email and I am writing a unit test that checks if that field is present in the reply from the server but I can't find an escape for the dots in the name of the field.
The code of my test is :

@Test
public void testEmailTemplates() throws Exception {
mockMvc.perform(get("/emailTemplates")
.contentType(MediaType.APPLICATION_JSON)
.locale(Locale.UK)
.accept(MediaType.APPLICATION_JSON))

.andDo(print())
.andExpect(status().isOk())

.andExpect(jsonPath("$.template.welcome.email").exists())

.andExpect(redirectedUrl(null))
.andExpect(forwardedUrl(null));
}


But I get the following exception, because the dots are interpreted like paths:

java.lang.AssertionError: No value for JSON path: $.template.welcome.email, exception: invalid path
at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:74)
at org.springframework.test.util.JsonPathExpectationsHelper.exists(JsonPathExpectationsHelper.java:121)
at org.springframework.test.web.servlet.result.JsonPathResultMatchers$3.match(JsonPathResultMatchers.java:77)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:141)
at


Do you know any escape character for the jsonPath?

Answer

It seems it is a bug in jsonPath. I've looked to the source code and it seems it doesn't have possibility to escape characters in path. The problem is in PathTokenizer's splitPath method.