Po aktualizacji do nowo wydanej 2.2.0.RELEASE
wersji Spring Boot niektóre z moich testów zakończyły się niepowodzeniem. Wygląda na to, że MediaType.APPLICATION_JSON_UTF8
został on uznany za przestarzały i nie jest już zwracany jako domyślny typ zawartości z metod kontrolera, które nie określają jawnie typu zawartości.
Kod testowy jak
String content = mockMvc.perform(get("/some-api")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andReturn()
.getResponse()
.getContentAsString();
nagle przestał działać, ponieważ typ zawartości był niezgodny, jak pokazano poniżej
java.lang.AssertionError: Content type
Expected :application/json;charset=UTF-8
Actual :application/json
Na razie zmieniam kod, aby .andExpect(content().contentType(MediaType.APPLICATION_JSON))
rozwiązać problem.
Ale teraz w porównaniu content
z oczekiwanym serializowanym obiektem nadal występuje niedopasowanie, jeśli w obiekcie znajdują się jakieś znaki specjalne. Wygląda na to, że .getContentAsString()
metoda nie wykorzystuje domyślnie kodowania znaków UTF-8 (więcej).
java.lang.AssertionError: Response content expected:<[{"description":"Er hörte leise Schritte hinter sich."}]> but was:<[{"description":"Er hörte leise Schritte hinter sich."}]>
Expected :[{"description":"Er hörte leise Schritte hinter sich."}]
Actual :[{"description":"Er hörte leise Schritte hinter sich."}]
Jak mogę uzyskać content
kodowanie UTF-8?