問題タブ [spring-hateoas]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - リソースIDをクライアントに提示する方法は?
org.springframework.hateoas.ResourceSupport
すでにgetId
メソッドが含まれています。
私のリソース(またはより良いドメインオブジェクト)にクライアントに提示する必要がある整数IDが含まれている場合、単純なものid
を追加してgetId
/を追加することはできませんsetId
(ResourceSupport
すでに持っているように)。
何かを返す必要がありますか、それとも<myResourceObjectName>_id
によって提供された ID リンク/URL をクライアントに解釈させるほうがよいResourceSupport
ですか?
java - @EnableHypermediaSupport に相当する XML 構成
Spring-HATEOAS を使用した REST API 開発に関する記事を読んだり、プロジェクト ページやドキュメントを閲覧したりしていましたが、これまで Java 構成を使用したサンプル コードしか見たことがありませんでした。@EnableHypermediaSupport
この記事の例に示されている構成と同等の XML はありますか?
spring - MongoRepository Keep HATEOAS フォーマットの実装/オーバーライド
post(save()) で生成された ObjectId を返すように変更したい単純な MongoRepository があります。
クライアント側でIDを生成して投稿に渡す方法を検討しましたが、Springにこれを処理してもらいたいです。
次のように、コントローラーでインターセプトし、ResponseBody でオブジェクトを返すことを試みました。
これの問題は、HATEOAS 関連のすべてのロジックの Spring ハンドルをやり直す必要があることです。これは大きな痛みです。(私が何かを見逃していない限り。)
すべてのメソッドを置き換えることなくこれを行う最も効果的な方法は何ですか?
spring - Spring-Data-Rest / Spring-Hateoas で生成されたクラスのフォーマットをカスタム コントローラーに反映させることはできますか?
私は本当に単純であるべきだと思うことをしようとしています。Question
spring-boot、spring-data-rest、spring-hateoas でセットアップされたオブジェクトがあります。すべての基本は正常に機能します。GET が myのURLList<Question>
とまったく同じ形式でを返すカスタム コントローラーを追加して、2 つの間の応答に互換性を持たせたいと考えています。Repository
/questions
これが私のコントローラーです:
オプション 1: 提供されたものに頼るSimplePagedResourceAssembler
このオプションの問題は、必要な_links
ものがレンダリングされないことです。これに対する修正があれば、それが最も簡単な解決策になります。
オプション 2: オープン リソース アセンブラーを実装する
このオプションの問題は、 Spring-Hateoas のドキュメントQuestionResourceAssembler
に従って実装すると、最終的に が のほぼ複製になるパスが導かれ、アセンブラーが 2 つのオブジェクト間でデータを手動でコピーする必要があり、すべてをビルドする必要があることです。関連するものを手で。これは多くの無駄な努力のようです。QuestionResource
Question
_links
何をすべきか?
Spring は、QuestionRepository
. コントローラーからの出力がシームレスで、生成された応答と交換可能であることを確認するために、そのコードを利用して使用する方法はありますか?
spring - RestTemplate を介して Spring ハイパーメディア リソースを HAL+JSON CURIE と交換する
Spring Framework 4.1.0 と Spring HATEOAS 0.16.0 を使用して、Spring Web アプリケーションとそのアプリケーション用の Spring テスト クライアントの両方を開発しています。
テスト クライアントには、次のようなステートメントがあります。
...ここ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 は次のようになります。
HAL+JSON ("application/hal+json")表現が CURIEを使用RestTemplate.exchange()
するリソースを取得するにはどうすればよいですか?
jersey - Spring HATEOAS のように JAX-RS リソースを別のリソースにリンクする方法はありますか?
Spring には@ExposesResourceFor
、リソースを他のリソースとリンクできるアノテーションがあります。このおかげで、Value オブジェクト (表現) は実際のリソースについて何も知ることができません。
JAX-RSでそれを行う方法はありますか? 私はJerseyとJacksonでDropwizardを@InjectLinks
使用していますが、表示されるのは次のような値オブジェクトで使用できる注釈だけです:
しかし、残念ながら、私の値オブジェクトはリソースについて何も知らないはずなので、リソースのレベルでそのようなリンクを行うことができるかどうか尋ねています-上記のように、コントローラーのスプリングヘイトでリンクします。
spring - RepositoryRestHandlerMapping と EndpointHandlerMapping を無効にする方法は?
現在、Spring Boot、Hibernate、および Spring-HATEOAS を使用して、REST インターフェイスを備えたアプリケーションを構築しています。私のデータモデルは注釈付きの Bean として定義されており@Entity
、Spring の機能を使用して Hibernate リポジトリを自動的にセットアップしています (Creating an interface extends PagingAndSortingRepository
)。私のアプリケーションは完全にアノテーション駆動型です。つまり、web.xml
Spring アノテーションなどを使用してすべてを構成する@Configuration
しかありません@Bean
。main
SpringApplication.run(MyApp.class, args);
これは正常に機能しますが、このアプローチではRepositoryRestHandlerMapping
andEndpointHandlerMapping
が作成されます。これらは、私が必要としない、または望んでいない一連のリソースを作成します。標準ロジック以上のことを行う必要があるため、独自のコントローラーを実装します。
このデフォルトの動作を防ぎ、これらのマッピングを無効にするにはどうすればよいですか?