2014-09-02 13 views
9

Mam trudności z ustaleniem, jak z pomocą jsonPath wywołać odpowiedź z dokumentu JSON w wiosennym pliku mvc. Być może jest lepszy sposób osiągnięcia tego niż użycie jsonPath dla tego konkretnego scenariusza. Chciałbym potwierdzić, że tablica links ma element rel "self", a atrybut "href" obiektu "self" ma również atrybut "href", który jest równy "/". Odpowiedź JSON wygląda następująco:Wstawianie tablic z JSONPath i sprężyną mvc

{ 
    "links":[ 
     { 
     "rel":[ 
      "self" 
     ], 
     "href":"/" 
     }, 
     { 
     "rel":[ 
      "next" 
     ], 
     "href":"/1" 
     } 
    ] 
} 

Próbowałem to gdzie mogę zobaczyć, że ma rel [0] ma własny, ale wolałbym, aby nie polegać na którym w tablicy linki i tablicy rel jaźń jest i faktycznie sprawdź, co to href jest w linkach [rel] [self] to "/". Jakieś pomysły?

@Before 
    public void setup() { 
    MockitoAnnotations.initMocks(this); 
    mockMvc = MockMvcBuilders.standaloneSetup(welcomeController).build(); 
    } 

    @Test 
    public void givenRootUrl_thenReturnLinkToSelf() throws Exception { 
    mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()) 
     .andExpect(jsonPath("$.links[0].rel[0].", is("self"))); 
    } 

Odpowiedz

9

Jak o dodanie kilku andExpect metod? Coś podobnego do:

mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()) 
    .andExpect(jsonPath("$.links[0].rel[0]", is("self"))) 
    .andExpect(jsonPath("$.links[0].href[0]", is("/")); 
+0

Wiesz, czy istnieje sposób, aby to zrobić bez hardcoding indeksy tablicy (w przypadku kolejność jest inna)? –

+0

Kevin, możesz użyć wyrażenia regularnego w swojej ścieżce jsonpath, np. $ .links [? (@. Rel = ~ /.*self/i)] lub coś w tym stylu. Proszę sprawdzić pełną dokumentację tutaj: https://github.com/json-path/JsonPath –

Powiązane problemy