Après avoir mis à niveau vers la nouvelle 2.2.0.RELEASE
version de Spring Boot, certains de mes tests ont échoué. Il semble que le MediaType.APPLICATION_JSON_UTF8
soit obsolète et qu'il ne soit plus renvoyé comme type de contenu par défaut à partir des méthodes de contrôleur qui ne spécifient pas le type de contenu explicitement.
Code de test comme
String content = mockMvc.perform(get("/some-api")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andReturn()
.getResponse()
.getContentAsString();
n'a soudainement plus fonctionné car le type de contenu n'était pas compatible, comme illustré ci-dessous
java.lang.AssertionError: Content type
Expected :application/json;charset=UTF-8
Actual :application/json
Changer le code pour .andExpect(content().contentType(MediaType.APPLICATION_JSON))
résoudre le problème pour l'instant.
Mais maintenant, lors de la comparaison content
avec l'objet sérialisé attendu, il y a toujours un décalage s'il y a des caractères spéciaux dans l'objet. Il semble que la .getContentAsString()
méthode n'utilise pas le codage de caractères UTF-8 par défaut (plus).
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."}]
Comment puis-je obtenir content
en encodage UTF-8?