問題タブ [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-boot - Spring HATEOAS (w Spring Boot) リソースを返すときの JAXB マーシャル エラーまたは PagedResources結果
コントローラーに次のようなものがあります。
そのコントローラ メソッドにマップされた URL に移動すると、次の根本原因で 500 エラーが発生します。
リソースに @XmlRootElement アノテーションをスローすると、次のエラーになります。
Accept ヘッダーが application/json または application/hal+json であれば問題ありません。この問題は、クライアント (この場合はクロム) が application/xml を探している場合にのみ発生します (HATEOAS がクライアントの要求に従っているため、これは理にかなっています。XML メッセージ コンバーターをリストに追加するスプリング ブートの @EnableAutoConfiguration を使用しています)。したがって、XML コンテンツ タイプを有効にします。
少なくとも 2 つのオプションがあると思います: 1. jaxb エラーを修正する 2. サポートされているコンテンツ タイプから xml を削除する
どちらかを行う方法がわからないか、別のオプションがあるかもしれません。
spring - Spring HATEOAS との Spring Data Rest 統合
さまざまなドキュメントと説明から、これまでに次のポイントを獲得し、学びました。
Spring Data Rest (SDR) は、Spring Data リポジトリを REST サービスとして公開するために使用されるため、JAXRS を手動で作成する必要なく、自己探索に使用できます。リポジトリ層でのみ機能し、を使用した構成以外の変更または追加に関して、その動作方法を制御することはできません
RepositoryRestMvcConfiguration
。内部のどこかで Spring HATEOAS を使用しています。Spring HATEOAS は、コントローラーまたは REST エンドポイントを介して返されるエンティティ内にリンクを作成するために作成されています。エンティティまたはラッパー クラスを
ResourceSupport
拡張してエンティティResource
をラップし、リンクを作成または追加する必要があります。や など、使用する注釈とクラスがいくつかあり@EnableHyperediaSupport
ますEntityLinks
。
まだ調べていない、または知り得ていない点がいくつかあるかもしれませんが、SDR を HATEOAS リンク構築プロセスにどのように組み合わせることができるのかに興味がありました。たとえば、と言ってください。
だから、公開されたRESTリポジトリを手動のHATEOASリンク構築プロセスに含めたかっただけです..そうすることが可能ですか?
spring-data-rest - スプリング データ レストから HATEOS を削除しますか?
春のデータレストからHATEOSを外すことは可能ですか?
私がやりたいことは、ネストされたクラスからも値を取得する必要があるため、春からプレーンな JSON を取得することです。
spring - あいまいなパスを回避するために、この REST サービスを修正するにはどうすればよいですか?
春のハテオアスを使って休憩サービスを作っています。REST API を介して公開しているデータベース エンティティがあります。簡単にするために、次の 3 つのフィールドを持つエンティティがあるとします。
id
- 一意の識別子service
- このアイテムが属するサービスvalue
- このアイテムの数値属性
次の URL スキーマを実装しようとしています。
@RequestMapping(value = "")
- すべてのアイテムのコレクションを返す-
@RequestMapping(value = "/{id}")
これで特定のアイテムをid
@RequestMapping(value = "/{service}")
返す - これですべてのアイテムのコレクションを返すservice
@RequestMapping
ここでの問題は、2 番目と 3 番目のパスがあいまいであり、たとえば以下の URL を試してみると、 Spring がどちらに一致するかがわからないことです。
http://localhost/123
どうすればこれに対処できますか?
spring-boot - Spring HATEOAS `ControllerLinkBuilder` のホストとポートを設定する手段はありますか?
Spring HATEOAS は、ControllerLinkBuilder
コントローラー メソッドへのリンクを作成するのに便利な機能を提供します。これは、クライアントに返される JSON/XML に href として追加されます。例えば:
... 次のような JSON を生成する場合があります。
でも...
リバース プロキシ経由でサービスにアクセスする傾向があります。おそらくほとんどの人がそうするだろうと思います。これにより、異なるポートで複数のサービスを実行できますが、同じベース URL を介してそれらすべてにアクセスできます。残念ながら、プロキシ経由のアクセスは、Spring HATEOAS によって生成される URL がリソースへのアクセスに有効な URL ではないことを意味します。
これで、リンクをハードコードすることができましたが、それはかなり脆弱です。ControllerLinkBuilder
コントローラーの構成に基づいて URL を生成すること@RequestMapping
は、リンクが現実と同期しなくなるリスクを回避できるため、私にとって価値があります。
そのため、ホストとポートの値を強制するために使用できるプロパティがどこかにあるかどうか疑問に思っていました。私はSpring Bootを使用しているので、理想的にapplication.properties
は各環境のファイルに追加できるプロパティです。
ノート:
この問題は Spring のバグによって引き起こされているように思われるため、Spring Boot 1.0.2.RELEASE を使用していることを指摘しておく必要があります。
spring-data - 春のデータ REST でコレクション エンティティのリンクを公開する
spring data REST を使用して、ProjectRepository
プロジェクトの一覧表示とそれらに対する CRUD 操作の実行をサポートする を公開しました。に行くとhttp://localhost:8080/projects/
、期待どおりにプロジェクトのリストが表示されます。
私がやろうとしているのは_links
、プロジェクト コレクションの JSON 応答のセクションにカスタム アクションを追加することです。
たとえば、次のhttp://localhost:8080/projects/
ようなものを返すように呼び出したいと思います。
どこcustomAction
かのコントローラで定義されています。
私は次のクラスを作成しようとしました:
そして、次の Bean をアプリケーション構成に追加します。
しかしprocess(...)
、呼ばれることはないようです。リソースのコレクションにリンクを追加する正しい方法は何ですか?