java - Spring REST 文档 : special characters are not shown correctly

标签 java spring spring-mvc asciidoctor spring-restdocs

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

特殊字符如何正确显示?

最佳答案

这里的根本问题是将请求的内容从 byte[] 转换为字符串。 Spring REST Docs 使用 Content-Type header 的 charset 属性来确定创建 String< 时应使用的 Charset/。如果没有 Content-Type header 或其值没有 charset 属性,则使用 JVM 的默认 Charset(由于调用new String(bytes))。

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

  1. 在请求的 Content-Type header 中指定字符集属性。例如,使用 text/plain;charset=UTF-8 而不是 text/plain
  2. 通过设置 file.encoding 系统属性来配置 JVM 的默认Charset。例如,-Dfile.encoding=UTF8

关于java - Spring REST 文档 : special characters are not shown correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35359141/

相关文章:

java - Java中如何删除Not null约束?

java - 如何在 selenium 中设置 firefoxdriver 的驱动程序路径

java - 如何以编程方式验证 Web 表单的登录凭据?

java - Spring Web应用程序-获取表单数据-post方法

java - HttpSecurity 配置 - permitall 仍然需要基本身份验证

java - 如何在 Hibernate 中从父表检索值到子表?

java - Spring Boot - 配置和初始化多个数据源

spring - WebSocket动态添加和删除Endpoints

java - 来自单个 jsp 表单 spring mvc 的多模型属性

java - 如何将 127.0.0.1 重定向到 localhost (Java)?