2014-10-30 34 views
0

我使用Spring Framework 4.1.0和Spring HATEOAS 0.16.0爲該應用程序開發Spring Web應用程序和Spring測試客戶端。通過RestTemplate與HAL + JSON CURIE交換Spring超媒體資源

測試客戶端具有如語句:

ResponseEntity<Resource<Calculation>> response = restTemplate.exchange(
    calculationsUri, 
    HttpMethod.POST, 
    new HttpEntity<Calculation>(calculation), 
    new ParameterizedTypeReference<Resource<Calculation>>() 
); 

...其中Calculation是傑克遜註釋的POJO(例如,@JsonProperty)。

如果沒有CURIE,RestTemplate.exchange()調用成功:response.getBody().getLinks()返回一個非空的非空實例List<Link>

我的web應用程序有非標準的鏈接關係,例如「子計算」。我想使用CURIE。

隨着居里,即RestTemplate.exchange()調用失敗:響應-反序列化代碼拋出org.springframework.http.converter.HttpMessageNotReadableException,致com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 「無法讀取JSON:無法識別的字段‘姓名’(類org.springframework.hateoas.Link),而不是被標記爲(一個已知屬性「href」])'

特別是,傑克遜未能將CURIE從_links地圖中的響應JSON反序列化爲List<Link>型字段org.springframework.hateoas.ResourceSupport.links。響應JSON的樣子:

{ 
    "_links" : { 
    "self" : { 
     "href" : "..." 
    }, 
    "myNamespace:sub-calculations" : [ { 
     "href" : "..." 
    }, { 
     "href" : "..." 
    } ], 
    "curies" : [ { 
     "href" : ".../{rel}", 
     "name" : "myNamespace", 
     "templated" : true 
    } ] 
    } 
} 

我可以怎樣利用RestTemplate.exchange()獲得資源,其HAL+JSON ("application/hal+json")表示採用居里?

+0

客戶端是否包含Spring HATEOAS? – zeroflagL 2014-10-31 08:38:51

+0

@zeroflagL:是的,客戶端包含Spring HATEOAS。 – 2014-10-31 16:07:00

+0

我不認爲Springhasho與Spring4兼容。 – 2014-10-31 18:20:03

回答

0

看起來像圖書館根本不支持HAL鏈接對象的名稱字段https://tools.ietf.org/html/draft-kelly-json-hal-06#section-5.5 ...實際上與CURIE沒有任何關係。您應該打開該庫的問題以支持HAL鏈接對象的所有字段。

就你的例子中的CURIE @CCCV而言,它們的關鍵是AWALYS myNamespace:無論CURIE是否存在,子計算都是如此。 CURIE只是讓你解引用一個URL鏈接到文檔。這有點奇怪,而且我認爲實現總是錯誤地認爲URI是重要的。請參閱https://groups.google.com/d/msg/hal-discuss/lt0CnC3eev4/YinN1Us54KcJ我不是說我同意它..但這就是它應該如何

相關問題