2016-04-07 10 views
1

RestControllerクラスの異なるメソッドに同じURLをマップすることができるかどうかを知りたいと思っています。例:同じURLを別のメソッドに春にリクエストボディに基づいてマッピングする

@RequestMapping(value="/delete", method=RequestMethod.POST) 
public void delete(@RequestBody String id) { 
    //do something 
} 

@RequestMapping(value="/delete", method=RequestMethod.POST) 
public void delete(@RequestBody Book book) { 
    //do something 
} 

リクエストボディは常にJSONペイロードになります。もしそれが{"id":"foo"}なら私は最初のメソッドを呼びたい。リクエストの本文が次の場合:

{ 
    "title":"Spring Guide", 
    "author":"John Doe" 
} 

私は2番目のメソッドを呼び出す必要があります。これは可能ですか?

+6

いいえペイロードに基づいて区別することはできません。 –

+0

あなたのコードスニペットに基づいて、 '/ books/{id}'に 'DELETE'ハンドラを作るほうが適しているようです。 –

+0

これを試すことができます:1つの注釈付きメソッドが両方のJSONペイロードをObject、つまり '@RequestBody Object obj'として渡し、それを' String'または 'Book'に変換してそれを削除するようにします。 –

答えて

-1

ペイロードのみで区別する方法はありません。

私がここで行ったテストとM. DeinumとAli Dehghaniの回答に基づいて、これを行う最良の方法は、それぞれのケースごとに異なるURLを持つことだと思います。したがって、/books/{id}はIDで削除し、/booksをオブジェクトのJSONと共にボディを通過させて削除します。コメントしたすべてのありがとう。

+1

これは本当に質問された質問に対する答えではありません。答えは「いいえ、ペイロードに基づいて区別することはできません」となります。 – eis

関連する問題