0

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()するリソースを取得するにはどうすればよいですか?

4

1 に答える 1

0

ライブラリは単に HAL リンク オブジェクトの名前フィールドをサポートしていないようですhttps://datatracker.ietf.org/doc/html/draft-kelly-json-hal-06#section-5.5 ...実際にはそうではありませんキュリーと関係があります。HAL リンク オブジェクトのすべてのフィールドをサポートするには、そのライブラリで問題を開く必要があります。

あなたの例のCURIE @CCCVに関する限り、CURIEが存在するかどうかに関係なく、キーはAWALYS myNamespace:sub-calculationsです。CURIE では、ドキュメントにリンクする必要がある URL への逆参照を許可するだけです。それはちょっと奇妙で、URIが重要であると考えて、実装が常に間違っているのを目にします。https://groups.google.com/d/msg/hal-discuss/lt0CnC3eev4/YinN1Us54KcJ を参照

于 2014-11-06T18:19:25.897 に答える