HATEOAS JAX-RS Link-Headers

时间:2016-05-27 18:05:35

标签: java rest jersey jax-rs hateoas

我目前正在尝试使用原始JAX-RS构建RESTful API。我了解到,在构建REST API时,有一个名为HATEOAS的原则(超媒体作为应用程序状态的引擎)。在我的课堂上,我们使用Link Headers告诉客户端如何进一步推进应用程序。我已设法实现所有基本功能,并可在将应用程序部署到tomcat服务器后访问服务器。 我现在的问题是,如何添加一个包含通配符的标题链接供用户填写,例如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: <http://example.com/api/resources/{id}>; rel: "edit"

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

我发现,JAX-RS无法实现http://example.com/api/resources/{id}中的链接,因为UriBuilder会尝试解析任何被花括号包围的网址部分。如果你想给一个Uri模板,那就像http://example.com/api/resources/:id一样使用。不幸的是,客户端必须执行类似String.replace()的操作来实际创建&#34;创建&#34;有效的URI。