После обновления до недавно выпущенной 2.2.0.RELEASE
версии Spring Boot некоторые из моих тестов не прошли. Похоже, что MediaType.APPLICATION_JSON_UTF8
устарело и больше не возвращается как тип контента по умолчанию из методов контроллера, которые не указывают тип контента явно.
Тестовый код, такой как
String content = mockMvc.perform(get("/some-api")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andReturn()
.getResponse()
.getContentAsString();
, внезапнобольше не работал, так как тип контента не соответствовал, как показано ниже
java.lang.AssertionError: Content type
Expected :application/json;charset=UTF-8
Actual :application/json
Изменение кода на .andExpect(content().contentType(MediaType.APPLICATION_JSON))
решило проблему на данный момент.
Но теперь при сравнении content
с ожидаемым сериализованным объектом все еще существует несоответствие, если в объекте есть какие-либо специальные символы. Похоже, что метод .getContentAsString()
не использует кодировку символов UTF-8 по умолчанию (больше).
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."}]
Как я могу получить content
в кодировке UTF-8?