4

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

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

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

等等。

Jackson JSONFilters 看起来很接近,但我不太了解它。特别相关的是,有时一个属性将被映射到“_embedded”的集合中,有时在“_links”中使用不同的技术。

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

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

4

2 回答 2

4

您需要实现您的自定义杰克逊序列化器(http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/JsonSerializer.html

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

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

于 2012-11-26T16:29:40.060 回答
0

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

https://github.com/RestExpress/HyperExpress

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

于 2014-10-16T00:53:47.903 回答