Java Spring REST文档:特殊字符未正确显示

Java Spring REST文档:特殊字符未正确显示,java,spring,spring-mvc,asciidoctor,spring-restdocs,Java,Spring,Spring Mvc,Asciidoctor,Spring Restdocs,在我的Spring MVC测试(UTF-8编码)中,我们发现: AscidActor文件包含 HTTP Request include::{snippets}/docs/http-request.adoc[] 在我渲染它并在firefox浏览器中打开生成的HTML文件(也是UTF-8编码的)后,我发现 HTTP Request POST /my-service HTTP/1.1 ... Größe 如何正确显示特殊字符?在调用prettyPrint()后,它可以工作: action.a

在我的Spring MVC测试(UTF-8编码)中,我们发现:

AscidActor文件包含

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())));

这里的根本问题是将请求内容作为
字节[]
转换为字符串。Spring REST文档使用
内容类型
标题的
字符集
属性来确定创建
字符串时应使用的
字符集
。如果没有
内容类型
标题,或者其值没有
字符集
属性,则使用JVM的默认
字符集
(作为调用
新字符串(字节)
)的结果)

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

  • 在请求的
    内容类型
    头中指定字符集属性。使用
    文本/纯文本;例如,charset=UTF-8
    而不是
    text/plain
  • 通过设置
    file.encoding
    系统属性,配置JVM的默认
    Charset
    <例如,code>-Dfile.encoding=UTF8

  • 当你说“在生成的文档中查找”时,你是如何打开它的?您指定的是哪种编码?
    {snippets}/docs/http request.adoc
    文件的内容看起来正确吗?嗨@AndyWilkinson,不,adoc文件看起来不正确:
    GrÃe
    @JohannesFlügel这几乎肯定是REST文档中的一个bug。可悲的是,我正在努力复制它。你能用一个复制问题的小样本打开一个问题()吗?关于您的操作系统、其区域设置等的一些信息也会非常有用。@AndyWilkinson:在这里:我对这个解决方案不太满意。Web服务返回响应主体中发布的
    myRequestDTO
    。然后我们在HTML文档中找到
    Gr??e
    。如果没有
    prepreprocessresponse(prettyPrint())
    我们会找到正确的
    Größe
    。不幸的是,将
    replacePattern(Pattern.compile(“Gr.+e”),“Gröe”)
    添加到
    prepreprepreresponse
    中并没有帮助。这应该是不必要的,如果是,我想您已经发现了一个bug。我自己会打开(并希望修复)一个,但我正在努力复制你看到的行为。
    action.andDo(document("docs", 
        preprocessRequest(prettyPrint()),
        preprocessResponse(prettyPrint())));