Depois de atualizar para a 2.2.0.RELEASE
versão recém-lançada do Spring Boot, alguns dos meus testes falharam. Parece que MediaType.APPLICATION_JSON_UTF8
foi preterido e não é mais retornado como tipo de conteúdo padrão dos métodos do controlador que não especificam o tipo de conteúdo explicitamente.
Código de teste como
String content = mockMvc.perform(get("/some-api")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andReturn()
.getResponse()
.getContentAsString();
de repente não funcionou mais, pois o tipo de conteúdo era incompatível, como mostrado abaixo
java.lang.AssertionError: Content type
Expected :application/json;charset=UTF-8
Actual :application/json
Alterando o código para .andExpect(content().contentType(MediaType.APPLICATION_JSON))
o problema resolvido por enquanto.
Mas agora, ao comparar content
com o objeto serializado esperado, ainda há uma incompatibilidade se houver algum caractere especial no objeto. Parece que o .getContentAsString()
método não utiliza a codificação de caracteres UTF-8 por padrão (mais nada).
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."}]
Como posso obter a content
codificação UTF-8?