2016-06-21 20 views
2

Ich verwende Spring Restdocs, um Dokumentation auf meinem REST Webapi zu erstellen; Ich habe das Ding integriert und mein HTML wird erzeugt (maven + asciidoc plugin, restassured apis). Das einzige Problem, das ich habe, ist, dass ifeval entweder nicht funktioniert wie angekündigt oder ich habe es falsch gemacht.Spring Restdocs markieren optionale Parameter mit Asciidoc

Mein individueller Anfrage-fields.snippet sieht wie folgt aus:

|=== 
|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}} 
|=== 

Der ‚optional‘ Wert im tablecellcontent korrekt wiedergegeben wird (‚true‘ oder ‚falsch‘ je nach Fall), aber die ifeval wird nicht geparst (und zeigt sich somit im letzten html ohne Fehler).

Ich versuchte verschiedene Syntaxen für den Ausdruck, aber keiner scheint zu funktionieren; Irgendwelche Hinweise auf die eventuell richtige Syntax? Ich denke darüber nach, ein benutzerdefiniertes Attribut zu definieren und ifndef zu verwenden, um das gleiche Ergebnis zu erhalten, aber ich würde es vorziehen, wenn möglich die vorhandene optionale() Unterstützung zu verwenden.

Da bat ich die resultierende .adoc bin Zugabe

|=== 
|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 

|=== 
+0

Ich habe gerade erfahren, dass Direktiven am Anfang der Zeile sein muss; aber selbst wenn ich korrigiere, bekomme ich immer noch nicht das richtige Ergebnis (alle Zeilen haben die gleiche Formatierung, abgesehen vom optionalen Wert) –

+1

Ein Fehler, den Sie oben haben, ist '=' anstatt '==' in der zweiten Bedingung, aber das könnte sei nur ein Tippfehler in der Frage. Können Sie das generierte '.adoc'-Snippet nicht mit der benutzerdefinierten Vorlage teilen? Wie haben Sie das Snippet in Ihre Hauptdatei '.adoc' eingefügt? –

+0

Ja, es ist enthalten, und das = war ein Tippfehler; Ich habe den generierten adoc hinzugefügt. Dies führt insbesondere dazu, dass kein Wert für "Pfad" gedruckt wird. Danke. –

Antwort

2

Das Problem in Ihrer benutzerdefinierten Vorlage, wo Sie {optional} statt {{optional}} in den ifeval Makros verwenden. Dies bedeutet, dass {optional} nicht durch das Feld optional des Felds ersetzt wird. Daher wertet Asciidoctor entweder "{optional}"=="true" oder aus.

Sie benötigen eine Vorlage zu aktualisieren, verwenden {{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}} 
|=== 
+0

danke, ich war mir sicher, dass ich das schon einmal versucht habe und es hat nicht funktioniert; Heute Morgen war es so. Wahrscheinlich war vorher noch etwas falsch ... –

+0

Es liegt ein Fehler in der Sekunde vor. Sollte sein 'ifeval :: ["{{optional}}" == "false"] ' – Mateusz

+0

Fixed. Vielen Dank. –