How can I document links in child documents using Spring REST Docs?
Given the following JSON document:
{
"links": {
"alpha": "http://example.com/alpha",
"beta": "http://example.com/beta"
}
}
I can document the links by implementing a custom LinkExtractor as suggested in the reference docs (I have working implementation that is very similar to the 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")
)
));
However, my JSON document contains links sub-documents in other places, e.g.
{
"links": {
"alpha": "http://example.com/alpha",
"beta": "http://example.com/beta",
},
"foo": {
"links": {
"gamma": "https://gamma.com/",
"delta": "https://delta.com/"
}
}
}
How can I document the links document associated with the foo sub-document? Ideally, I would like to do something like:
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")
)
));
Naturally, this does not work since there is no jsonPath(..) method. What other options are available?
I guess that the same problem occurs if you are using the HalLinkExtractor and attempt to document links in the _embedded sub-document (see the example in the draft-kelly-json-hal).