Spring Framework 4.1.0 と Spring HATEOAS 0.16.0 を使用して、Spring Web アプリケーションとそのアプリケーション用の Spring テスト クライアントの両方を開発しています。
テスト クライアントには、次のようなステートメントがあります。
ResponseEntity<Resource<Calculation>> response = restTemplate.exchange(
calculationsUri,
HttpMethod.POST,
new HttpEntity<Calculation>(calculation),
new ParameterizedTypeReference<Resource<Calculation>>()
);
...ここCalculation
で、Jackson アノテーション (たとえば、@JsonProperty
) を持つ POJO です。
CURIE がなければ、そのRestTemplate.exchange()
呼び出しは成功します:response.getBody().getLinks()
の null 以外の空でないインスタンスを返しますList<Link>
。
私の Web アプリケーションには、「サブ計算」などの非標準のリンク関係があります。CURIEを使いたい。
CURIE を使用すると、そのRestTemplate.exchange()
呼び出しは失敗します: 応答デシリアライゼーション コードが をスローorg.springframework.http.converter.HttpMessageNotReadableException
します。原因com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
: 'JSON を読み取れませんでした: 認識されないフィールド "名前" (クラス org.springframework.hateoas.Link)、無視可能としてマークされていません (既知のプロパティ "href" の 1 つ) ])'
特に、Jackson_links
は応答 JSON のマップからList<Link>
型付きフィールドへの CURIE のデシリアライズに失敗しますorg.springframework.hateoas.ResourceSupport.links
。応答の JSON は次のようになります。
{
"_links" : {
"self" : {
"href" : "..."
},
"myNamespace:sub-calculations" : [ {
"href" : "..."
}, {
"href" : "..."
} ],
"curies" : [ {
"href" : ".../{rel}",
"name" : "myNamespace",
"templated" : true
} ]
}
}
HAL+JSON ("application/hal+json")表現が CURIEを使用RestTemplate.exchange()
するリソースを取得するにはどうすればよいですか?