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(..)方法。还有哪些其他选择?

我猜如果您使用HalLinkExtractorand 尝试在_embedded子文档中记录链接,也会出现同样的问题(请参阅draft-kelly-json-hal中的示例)。

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 回答