Dopo aver eseguito l'aggiornamento alla 2.2.0.RELEASE
versione appena rilasciata di Spring Boot, alcuni dei miei test fallirono. Sembra che MediaType.APPLICATION_JSON_UTF8
sia stato deprecato e non venga più restituito come tipo di contenuto predefinito dai metodi del controller che non specificano esplicitamente il tipo di contenuto.
Codice di prova simile
String content = mockMvc.perform(get("/some-api")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andReturn()
.getResponse()
.getContentAsString();
improvvisamente non ha più funzionato poiché il tipo di contenuto non era corrispondente come mostrato di seguito
java.lang.AssertionError: Content type
Expected :application/json;charset=UTF-8
Actual :application/json
La modifica del codice per .andExpect(content().contentType(MediaType.APPLICATION_JSON))
risolvere il problema per ora.
Ma ora quando si confronta content
con l'oggetto serializzato previsto c'è ancora una discrepanza se ci sono caratteri speciali nell'oggetto. Sembra che il .getContentAsString()
metodo non utilizzi la codifica dei caratteri UTF-8 per impostazione predefinita (non più).
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."}]
Come posso ottenere la content
codifica UTF-8?