Spring restdocs 使用 asciidoc 有条件地高亮可选参数

Spring restdocs conditionally highlight optional parameters with asciidoc

我正在使用 spring restdocs 生成关于我的 REST webapi 的文档;我已经集成了这个东西并且我的 html 得到了生成(maven + asciidoc 插件,restassured apis)。 我遇到的唯一问题是 ifeval 要么没有像宣传的那样工作,要么我弄错了。

我的自定义请求-fields.snippet 如下所示:

|===
|Path|Type|Description|Optional

{{#fields}}
 |{{#tableCellContent}}
ifeval::["{optional}"=="true"]
   `{{path}}`
endif::[]
ifeval::["{optional}"="false"]
   *`{{path}}`*
endif::[]
  {{/tableCellContent}}
  |{{#tableCellContent}}`{{type}}`{{/tableCellContent}}
  |{{#tableCellContent}}{{description}}{{/tableCellContent}}
  |{{#tableCellContent}}{{optional}}{{/tableCellContent}}

{{/fields}}
|===

tablecellcontent 中的 'optional' 值被正确呈现('true' 或 'false' 视情况而定),但 ifeval 未被解析(因此在最终 html,没有错误)。

我为表达式尝试了不同的语法,但 none 似乎有效;关于什么是正确语法的任何提示(如果有)? 我正在考虑定义一个自定义属性并使用 ifndef 来获得相同的结果,但如果可能的话我更愿意使用现有的 optional() 支持。

根据要求,我添加了生成的 .adoc

|===
|Path|Type|Description|Optional

|
ifeval::["{optional}"=="true"]
   `name`
endif::[]
ifeval::["{optional}"=="false"]
   *`name`*
endif::[]
|`String`
|Name of the new Axis
|false

|
ifeval::["{optional}"=="true"]
   `description`
endif::[]
ifeval::["{optional}"=="false"]
   *`description`*
endif::[]
|`String`
|Description of the new Axis
|true

|
ifeval::["{optional}"=="true"]
   `tags[]`
endif::[]
ifeval::["{optional}"=="false"]
   *`tags[]`*
endif::[]
|`TagDto[]`
|Hierarchical view of axis' tags
|false

|
ifeval::["{optional}"=="true"]
   `tags[].id`
endif::[]
ifeval::["{optional}"=="false"]
   *`tags[].id`*
endif::[]
|`Number`
|Id of the tag
|false

|
ifeval::["{optional}"=="true"]
   `tags[].name`
endif::[]
ifeval::["{optional}"=="false"]
   *`tags[].name`*
endif::[]
|`String`
|Name of the tag
|false

|
ifeval::["{optional}"=="true"]
   `tags[].children`
endif::[]
ifeval::["{optional}"=="false"]
   *`tags[].children`*
endif::[]
|`TagDto[]`
|Child tags for this tag, if any
|true

|===

问题出在您在 ifeval 宏中使用 {optional} 而不是 {{optional}} 的自定义模板。这意味着 {optional} 不会被字段的 optional 属性替换,因此,Asciidoctor 正在评估 "{optional}"=="true""{optional}"=="false".

您需要更新模板才能使用 {{optional}}:

|===
|Path|Type|Description|Optional

{{#fields}}
 |{{#tableCellContent}}
ifeval::["{{optional}}"=="true"]
   `{{path}}`
endif::[]
ifeval::["{{optional}}"=="false"]
   *`{{path}}`*
endif::[]
  {{/tableCellContent}}
  |{{#tableCellContent}}`{{type}}`{{/tableCellContent}}
  |{{#tableCellContent}}{{description}}{{/tableCellContent}}
  |{{#tableCellContent}}{{optional}}{{/tableCellContent}}

{{/fields}}
|===