2

在我的 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

特殊字符如何正确显示?

4

2 回答 2

3

这里的根本问题是将请求的内容byte[]转换为字符串。Spring REST Docs 使用header的charset属性来确定在创建. 如果没有标头或其值没有属性,则使用 JVM 的默认值(作为调用的结果)。Content-TypeCharsetStringContent-TypecharsetCharsetnew String(bytes)

有两种方法可以避免损坏特殊字符:

  1. 在请求的标头中指定一个字符集属性Content-Type。例如,使用text/plain;charset=UTF-8而不是text/plain
  2. Charset通过设置file.encoding系统属性来配置 JVM 的默认值。-Dfile.encoding=UTF8, 例如。
于 2016-02-15T14:34:02.740 回答
1

在我调用prettyPrint()它之后:

action.andDo(document("docs", 
    preprocessRequest(prettyPrint()),
    preprocessResponse(prettyPrint())));
于 2016-02-12T10:08:09.083 回答