Después de actualizar a la 2.2.0.RELEASE
versión recién lanzada de Spring Boot, algunas de mis pruebas fallaron. Parece que MediaType.APPLICATION_JSON_UTF8
ha quedado en desuso y ya no se devuelve como tipo de contenido predeterminado de los métodos del controlador que no especifican explícitamente el tipo de contenido.
Código de prueba 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 ya no funcionó ya que el tipo de contenido no coincidía como se muestra a continuación
java.lang.AssertionError: Content type
Expected :application/json;charset=UTF-8
Actual :application/json
Cambiando el código para .andExpect(content().contentType(MediaType.APPLICATION_JSON))
resolver el problema por ahora.
Pero ahora, cuando se compara content
con el objeto serializado esperado, todavía hay una falta de coincidencia si hay caracteres especiales en el objeto. Parece que el .getContentAsString()
método no utiliza la codificación de caracteres UTF-8 de forma predeterminada (más).
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."}]
¿Cómo puedo obtener la content
codificación UTF-8?