Infer UTF-8 encoding for JSON response with MockMvc's andDo(print(...))
Prior to this commit, the PrintingResultHandler in MockMvc -- typically invoked via .andDo(print()) -- printed an `application/json` response body using the default encoding (ISO-8859-1), which resulted in UTF-8 characters being garbled. Since an `application/json` response is implicitly encoded using UTF-8, the PrintingResultHandler now infers UTF-8 encoding for such response bodies. Closes gh-27926
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -23,10 +23,12 @@ import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.result.PrintingResultHandler;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.fail;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
@@ -61,6 +63,22 @@ class PrintingResultHandlerIntegrationTests {
|
||||
.contains("Headers = [Set-Cookie:\"enigma=42\", Content-Type:\"text/plain;charset=ISO-8859-1\", Content-Length:\"14\"]");
|
||||
}
|
||||
|
||||
@Test
|
||||
void printMvcResultsToWriterWithJsonResponseBodyInterpretedAsUtf8() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
|
||||
standaloneSetup(new SimpleController()).build()
|
||||
// "Hallöchen" is German slang for "hello".
|
||||
.perform(get("/utf8").accept(MediaType.APPLICATION_JSON).content("Hallöchen, Welt!".getBytes()).characterEncoding(UTF_8))
|
||||
.andDo(print(writer))
|
||||
// "Grüß dich!" is German for "greetings to you".
|
||||
.andExpect(content().bytes("Grüß dich!".getBytes()));
|
||||
|
||||
assertThat(writer).asString()
|
||||
.contains("Body = Hallöchen, Welt!")
|
||||
.contains("Body = Grüß dich!");
|
||||
}
|
||||
|
||||
@Test
|
||||
void printMvcResultsToWriterWithFailingGlobalResultMatcher() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
@@ -92,6 +110,11 @@ class PrintingResultHandlerIntegrationTests {
|
||||
response.addCookie(new Cookie("enigma", "42"));
|
||||
return "Hello Response";
|
||||
}
|
||||
|
||||
@GetMapping("/utf8")
|
||||
String utf8(HttpServletResponse response) {
|
||||
return "Grüß dich!";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user