0

有很多关于如何使用JAXB 和 HATEOAS包含超媒体链接的示例,但我找不到任何超媒体 + JSON 的示例。我喜欢 JAXB,因为只需使用注释,您就可以将 XML 映射到 Object。包括 HATEOAS,这几乎是我需要的,除了它只在 XML 中(当然是因为 JAXB)。根据2.0 用户指南,问题是 JAXB 提供程序不支持 JSON 。

因此,使用上面的示例,我正在寻找的不是这个 XML+Hypermedia 输出

<user-management>
  <users>/user-management/users</users>
  <report>/user-management/report</report>
</user-management>

而是获取此 JSON+超媒体输出

{
  "_links": {
    "self": { "href": "/user-management" },
    "users": { "href": "/user-management/users" },
    "report": { "href": "/user-management/report" },
  }
}

*是的,两个示例都是资源的表示,但对象/模型的示例应该相似,因此我不包括它们。

是不是因为这个 JSON+超媒体规范还没有标准化,所以今天没有框架可以做到这一点?我 发现 最多 的 是一个 提案, 和 一个 "待续 ... "

我知道我可以使用 MessageBodyWriter 创建自己的 JAX-RS 提供程序,但这仅有助于将“应用程序/json”请求编组到对象。我仍然需要一种方法来获取超媒体链接。

我正在寻找这个的原因是因为我当前的要求是返回包含超媒体链接的 JSON 数据。

有没有人有完整的工作示例?我找不到任何东西,我隐约记得看到一篇文章说我需要“自己动手”。不可取,但如果这就是它所需要的......

4

1 回答 1

0

你可以使用杰克逊,它应该能够做你想做的事,即:

@Data
public class Container {
    @JsonProperty("_links")
    Map<String,Link> links = new LinkedHashMap<>();
}

@Data
public class Link {
    @JsonProperty("href")
    private String href;
}

更正式地说,您可以定义一个自定义容器,而不是我定义的通用容器。

于 2014-08-30T17:31:16.967 回答