在我的Spring MVC测试(UTF-8编码)中,我们发现:
this.mockMvc = MockMvcBuilders.webAppContextSetup(context).apply(springSecurity())
.apply(documentationConfiguration(restDocumentation)
.snippets().withEncoding("UTF-8")) // default
.build();
...
myRequestDTO.setValue("Größe");
ResultActions action = this.mockMvc
.perform(post("/my-service")
.content(jacksonObjectMapper.writeValueAsString(myRequestDTO))
...
action.andDo(document("docs"));
asciidoctor文件包含
HTTP Request
include::{snippets}/docs/http-request.adoc[]
在我渲染它并在我的firefox浏览器中打开生成的HTML文件(也是UTF-8编码)后,我发现
HTTP Request
POST /my-service HTTP/1.1
...
Größe
如何正确显示特殊字符?
答案 0 :(得分:2)
这里的根本问题是将请求的内容转换为byte[]
到字符串中。 Spring REST文档使用charset
标头的Content-Type
属性来确定创建Charset
时应使用的String
。如果没有Content-Type
标头或其值没有charset
属性,则使用JVM的默认Charset
(作为调用new String(bytes)
的结果)。
有两种方法可以避免特殊字符的损坏:
Content-Type
标头中指定charset属性。例如,使用text/plain;charset=UTF-8
而不是text/plain
。Charset
系统属性来配置JVM的默认file.encoding
。例如-Dfile.encoding=UTF8
。答案 1 :(得分:1)
我打电话给prettyPrint()
之后就可以了:
action.andDo(document("docs",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint())));