Spring REST 文档:特殊字符未正确显示
Spring REST Docs: special characters are not shown correctly
在我的 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
如何正确显示特殊字符?
在我调用 prettyPrint()
之后它起作用了:
action.andDo(document("docs",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint())));
这里的根本问题是将请求的内容作为 byte[]
转换为字符串。 Spring REST Docs 使用 Content-Type
header 的 charset
属性来确定在创建 String
时应使用的 Charset
。如果没有 Content-Type
header 或其值没有 charset
属性,则使用 JVM 的默认值 Charset
(作为调用 new String(bytes)
的结果) .
有两种方法可以避免特殊字符损坏:
- 在请求的
Content-Type
header 中指定字符集属性。例如,使用 text/plain;charset=UTF-8
而不是 text/plain
。
- 通过设置
file.encoding
系统 属性 配置 JVM 的默认值 Charset
。 -Dfile.encoding=UTF8
,例如
在我的 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
如何正确显示特殊字符?
在我调用 prettyPrint()
之后它起作用了:
action.andDo(document("docs",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint())));
这里的根本问题是将请求的内容作为 byte[]
转换为字符串。 Spring REST Docs 使用 Content-Type
header 的 charset
属性来确定在创建 String
时应使用的 Charset
。如果没有 Content-Type
header 或其值没有 charset
属性,则使用 JVM 的默认值 Charset
(作为调用 new String(bytes)
的结果) .
有两种方法可以避免特殊字符损坏:
- 在请求的
Content-Type
header 中指定字符集属性。例如,使用text/plain;charset=UTF-8
而不是text/plain
。 - 通过设置
file.encoding
系统 属性 配置 JVM 的默认值Charset
。-Dfile.encoding=UTF8
,例如