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

时间:2012-06-10 14:20:36

标签: java json marshalling jackson

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

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

  • / user具有用户数据和“_embedded”项目,但仅限于那些项目 包含“_links”到节点(和自己)
  • / project / 1234有“_embedded”节点,但这些节点“_links”为进一步的数据。

等等。

杰克逊JSONFilters看起来很近,但我并没有抓住它。特别相关的是,有时属性将被映射到“_embedded”的集合中,有时使用不同的技术映射到“​​_links”。

有人试过这样的事吗?

有HalBuilder,但似乎需要手动序列化,我想避免。然后,杰克逊似乎差不多就像手工序列化一样。

2 个答案:

答案 0 :(得分:4)

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

看看Spring Hateoas项目。他们实施了杰克森扩展HalJacksonModulehttps://github.com/SpringSource/spring-hateoas/commit/61e73107c1213556c025dc8f68a8784daf089796  )启用HAL序列化到杰克逊。我认为你可以使用它或根据你的需要进行调整。

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

答案 1 :(得分:0)

我发现RestExpress库非常棒,它包含对HAL的支持。作者完成了基于一个简单配置构建序列化机制和链接的所有工作。

https://github.com/RestExpress/HyperExpress

https://github.com/RestExpress/HyperExpress/tree/master/hal