2012-06-10 64 views
4

我試圖在JAX-RS服務中實現HAL standard for JSON。我的項目由包含許多項目的用戶組成,其中包含許多節點,其中包含各種數據和指向其他節點的指針。有條件地將元素渲染爲鏈接以實現Java中的HAL

所以當端點被擊中,我想嵌入對象的一個​​深層次,之後鏈接:

  • /用戶的用戶數據和「_embedded」項目,但只有那些含有 項目節點(和自身)的「_links」
  • /project/1234具有「_embedded」節點,但這些節點「_links」用於進一步數據。

依此類推。

傑克遜的JSONFilters看起來很接近,但我並沒有完全理解它。尤其相關的是,有時候一個屬性會被映射到一個「_embedded」集合中,有時候會被使用不同的技術映射到「​​_links」中。

任何人試過這樣的事情?

有HalBuilder,但它似乎需要手序列化,我想避免。再說一遍,傑克遜似乎幾乎和手串行一樣多。

+0

是你能夠找到一個解決方案嗎? –

回答

4

您需要實現定製傑克遜串行(http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/JsonSerializer.html

看看春季HATEOAS項目。他們實施了傑克遜擴展HalJacksonModulehttps://github.com/SpringSource/spring-hateoas/commit/61e73107c1213556c025dc8f68a8784daf089796 ),以啓用HAL序列化到傑克遜。我認爲你可以使用它或適應你的需求。

此外,項目「Spring Data Rest」(http://www.springsource.org/spring-data/rest)提供了一種使用Spring Hateoas將JPA模型導出到REST(with hateoas)的方法。您可以查看代碼以獲取靈感,或者只是在代碼中使用框架。 (請記住將HalJacksonModule註冊到ObjectMapper)。