web-dev-qa-db-ja.com

オプションで、Spring DataRestでHATEOAS形式を無効にします

したがって、2つのエンドポイント/ peopleと/ pantsを持つ既存のアプリケーションがあるとしましょう。 GET/peopleを呼び出すと、次のようになります。

[
    {
        "name":"john",
        "age":37,
        "pants":[
            {
                "color":"green",
                "brand":"levis",
                "size":"medium"
            },
            {
                "color":"Indigo",
                "brand":"jncos",
                "size":"medium-with-huge-legs"
            }
        ]
    },
    {
        "name":"june",
        "age":23,
        "pants":[
            {
                "color":"pink",
                "brand":"gap",
                "size":"small"
            }
        ]
    }
]

Spring DataRestを使用してGET/personを呼び出すと、次のようなメッセージが表示されます。

{
    "_links":{
        "next":{
            "href":"http://myapp.com/people?page=1&size=20"
        },
        "self":{
            "href":"http://myapp.com/people{&page,size,sort}",
            "templated":true
        },
        "search":{
            "href":"http://myapp.com/people/search"
        }
    },
    "_embedded":{
        "people":[
            {
                "name":"john",
                "age":37,
                "_links":{
                    "self":{
                        "href":"http://myapp.com/people/john"
                    },
                    "pants":{
                        "href":"http://myapp.com/people/john/pants"
                    }
                }
            },
            {
                "name":"june",
                "age":23,
                "_links":{
                    "self":{
                        "href":"http://myapp.com/people/june"
                    },
                    "pants":{
                        "href":"http://myapp.com/people/june/pants"
                    }
                }
            }
        ]
    }
}

変更する必要のない既存のクライアントがたくさんあるとしましょう-場合によっては応答のハイパーメディア部分を無効にする方法はありますか(Accept = "application/json"など)、その他(Accept = "hal + json")?

ありがとう!

更新

わかりました-それで、私の残念なことに、私がやろうとしていることはサポートされていないようです。 SDRがハイパーメディアに強く傾いている理由を理解しました...しかし、ヘッダーに基づいてハイパーメディアを「無効にする」機能を提供することは悪いことです。

それはさておき、私は自分のコントローラーを介してこれを実際に達成する方法が少しわかりません。コントローラを作成し、/peopleRequestMappingを `produces =" application/json "でオーバーライドしようとすると、Accept =" application/json "で" raw "jsonを取り戻すことができますが、Accept =を渡すと「application/hal + json」「受け入れ可能な表現が見つかりませんでした」という406が表示されます。 SDRリソースマッピングがコンテンツタイプでマッピングされていないようです...何か提案はありますか?

16
Ben M

簡単に言うと、ハテオアなしではspring-data-restを使用することはできません。ハテオアなしでWebサービスを構築したい場合は、独自のコントローラーを作成する必要があります(これでもSpringデータリポジトリーを使用できます)。

オリバー・ギールケの引用 this SO post

実際、私の要点は、サーバーが適切なRESTを実行しているということです。それがクライアントを壊した場合、修正(微調整)する必要があるのはクライアントです。したがって、ハイパーメディアの側面はSpring Data RESTの基本的な側面であり、それを取り消すことはありません。具体的な状況ではおそらく満足のいくものではありませんが、少なくとも質問に答える必要があります:) 。 –オリバー・ギールケ

18
gyoder