HATEOAS JAX-RS Link-Headers

HATEOAS JAX-RS Link-Headers

我目前正在尝试使用原始 JAX-RS 构建 RESTful API。我了解到在构建 REST APIs 时,有一个称为 HATEOAS(Hypermedia as the engine of application state)的原理。在我的 class 中,我们使用 Link Headers 来告诉客户如何进一步推进申请。我已经设法实现了所有基本功能,并且可以在将应用程序部署到 tomcat 服务器后访问服务器。 我现在的问题是,如何添加一个包含通配符供用户填写的 header-link,例如一个 id?

到目前为止我已经试过了

@Path("/resources")
@Produces(MediaType.APPLICATION_JSON)
public Response listAllResources() 
{
     List<TestResource> resources = ...
     // get stuff from database
     return Response.ok(resources)
                    .link(UriInfo.getAbsolutePathBuilder().path("{id}").build(), "edit")
                    .build;
}

在我尝试访问上面定义的路径后,我收到一条错误消息,指出模板变量 id 未定义。 我找不到任何有用的资源来告诉我如何创建一个 link header,它看起来像:

link: <http://example.com/api/resources/{id}>; rel: "edit"

我希望我的问题足够清楚,因为这是我关于 Whosebug 的第一个问题:)

提前致谢!

我发现,JAX-RS 不可能像我的示例 http://example.com/api/resources/{id} 中那样链接,因为 UriBuilder 会尝试解析任何被大括号包围的 URL 部分。因此,如果您想提供一个 Uri 模板,只需使用 like http://example.com/api/resources/:id。不幸的是,客户端必须执行类似 String.replace() 的操作才能真正 "create" 一个有效的 URI。