1

Spring REST Docs を使用して子ドキュメント内のリンクを文書化するにはどうすればよいですか?

次の JSON ドキュメントがあるとします。

{
  "links": {
    "alpha": "http://example.com/alpha",
    "beta": "http://example.com/beta"
  }
}

リファレンス ドキュメントで提案されているようにlinks、カスタムLinkExtractorを実装することで文書化できます( HalLinkExtractorに非常によく似た実用的な実装があります)。

mockMvc.perform(get("/"))
    .andDo(document("root-resource",
        links(customLinkExtractor(),
            linkWithRel("alpha").description("Link to the Alpha resource"),
            linkWithRel("beta").description("Link to the Beta resource")
        )
    ));

ただし、私の JSON ドキュメントにはlinks、他の場所にサブドキュメントが含まれています。

{
    "links": {
        "alpha": "http://example.com/alpha",
        "beta": "http://example.com/beta",
    },
    "foo": {
        "links": {
            "gamma": "https://gamma.com/",
            "delta": "https://delta.com/"
        }
    }
}

サブlinksドキュメントに関連付けられたドキュメントを文書化するにはどうすればよいですか? foo理想的には、次のようなことをしたいと思います:

mockMvc.perform(get("/"))
    .andDo(document("root-resource",
        links(customLinkExtractor(),
            linkWithRel("alpha").description("Link to the Alpha resource"),
            linkWithRel("beta").description("Link to the Beta resource")
        ),
        links(jsonPath("$.foo"), 
            customLinkExtractor(),
            linkWithRel("gamma").description("Link to the Gamma resource"),
            linkWithRel("delta").description("Link to the Delta resource")
        )
    ));

当然、方法がないのでこれは機能しませんjsonPath(..)。他にどのようなオプションがありますか?

を使用し、サブHalLinkExtractorドキュメントにリンクを文書化しようとすると、同じ問題が発生すると思います ( draft-kelly-json-halの例を参照)。_embedded

4

1 に答える 1

0

カスタム リンク エクストラクタで正しい方向に進んでいると思います。別の方法を使用しようとするのではjsonPathなく、その機能をカスタム エクストラクタに追加してみませんか? 次に、リンクを探す場所を指定できます。例えば:

mockMvc.perform(get("/"))
    .andDo(document("root-resource",
        links(customLinkExtractor("$.links", "$.foo.links"),
            linkWithRel("alpha").description("Link to the Alpha resource"),
            linkWithRel("beta").description("Link to the Beta resource"),
            linkWithRel("gamma").description("Link to the Gamma resource"),
            linkWithRel("delta").description("Link to the Delta resource")
        )
    ));
于 2015-11-12T22:38:34.297 に答える