【问题标题】:is there a way annotate a Java class model to Produce JSON+Hypermedia links?有没有办法注释 Java 类模型来生成 JSON+超媒体链接?
【发布时间】:2014-10-23 18:58:57
【问题描述】:

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

所以,使用上面的示例,我正在寻找的不是这个 XML+超媒体输出

<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+超媒体规范还没有标准化,所以今天没有框架可以做到这一点?我发现最多的是a proposal,还有一个“To be continued...

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

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

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

【问题讨论】:

  • 技术上也没有针对 XML 执行此操作的标准方法。 JAXB 可能是一种方法,但重要的是媒体类型本身是否具有传达链接的能力。 XML 和 JSON 都不能做到这一点。但是,像 HAL 这样的格式位于两者的“顶部”,并为媒体类型提供了表达链接的能力。

标签: xml json rest jax-rs hypermedia


【解决方案1】:

您可以为此使用Jackson,它应该能够做您想做的事情,即:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-03-02
    • 2023-03-16
    • 2012-08-30
    • 2016-03-17
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    相关资源
    最近更新 更多