java - 有条件地将元素渲染为链接以在 Java 中实现 HAL

标签 java json marshalling jackson

我正在尝试实现 HAL standard for JSON在 JAX-RS 服务中。我的项目由用户组成,用户包含许多项目,项目包含许多节点,节点包含各种数据和指向其他节点的指针。

所以当一个端点被击中时,我想将对象嵌入一层深,然后链接:

  • /user 有用户数据和“_embedded”项目,但这些项目只有 包含节点(和自身)的“_链接”
  • /project/1234 有“_embedded”节点,但这些节点“_links”到更多数据。

等等。

Jackson JSONFilters 看起来很接近,但我不太了解它。尤其相关的是,有时属性会映射到“_embedded”集合中,有时会使用不同的技术映射到“​​_links”中。

有没有人尝试过这样的事情?

有 HalBuilder,但它似乎需要手动序列化,我想避免这种情况。话又说回来,Jackson 的代码似乎几乎和手工序列化一样多。

最佳答案

您需要实现自定义 Jackson Serializer (http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/JsonSerializer.html)

看看 Spring Hateoas 项目。他们已经实现了一个 jackson 扩展HalJacksonModule(https://github.com/SpringSource/spring-hateoas/commit/61e73107c1213556c025dc8f68a8784daf089796 ) 以启用 Jackson 的 HAL 序列化。我认为您可以使用它或根据您的需要调整它。

此外,“Spring Data Rest”项目 (http://www.springsource.org/spring-data/rest) 提供了一种使用 Spring Hateoas 将 JPA 模型导出到 REST(带有 hateoas)的方法。您可能会查看代码以获得灵感,或者只是在您的代码中使用该框架。 (记得将 HalJacksonModule 注册到 ObjectMapper 中)。

关于java - 有条件地将元素渲染为链接以在 Java 中实现 HAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10969443/

相关文章:

javascript - 使用动态字符串附加 JSON 对象键

javascript - 用 javascript 和 JSON 表示法创建 "classic"类有什么区别?

c# - C++ 和 C# 中的二进制序列化/反序列化

java - 在 Apache Camel 中输出 CSV 列标题

java - 如何设置默认数据库值

java - DAO 模式中的 TransferObject

java - Android保存用户登录注销状态

java - 字节流和相关内容

javascript - 读取动态 JSON 数组

.net - 如何正确地将 VB-Script 数组编码到用 C# 编写的 COM 组件或从中编码