2017-06-06 6 views
1

私は春-MVCを使用して、単一のメソッドを作成し、両方がそれに+ POSTをGETに設定したいと思います:RestControllerと同じ方法でGET + POSTを実行していますか?

@RestController 
public class MyServlet { 
    @RequestMapping(value = "test", method = {RequestMethod.GET, RequestMethod.POST}) 
    public void test(@Valid MyReq req) { 
      //MyReq contains some params 
    } 
} 

問題:上記のコードで、任意のPOSTリクエストは空MyReqオブジェクトにつながります。

メソッドシグニチャを@RequestBody @Valid MyReq reqに変更すると、ポストは機能しますが、GET要求は失敗します。

入力パラメータとしてBeanを使用する場合、同じメソッドでgetとpostを一緒に使用することはできません。

+1

あなたがセンJSONはGETリクエストでは一般的ではありませんが、一般的には本体はなくパラメータのみです。 Request Body!=リクエストパラメータ。したがって、バインドまたはシリアライゼーションの両方を使用することはできません。 –

+0

なぜこのようなことをしたいですか? GETメソッドとPOST HTTPメソッドは目的/セマンティクスが異なるため、多くの意味がありません。 – Jesper

+0

JSONをGETとして送信していません。私はGETとしてurlクエリーparamsを送り、POSTとしてJSON配列を送ります。 – membersound

答えて

3

あなたの問題を解決する最善の方法は、このようなもののようです:あなたはそれを受け取り、ビジネス・ロジックを実行するために、同じメソッドを呼び出す方法に応じて異なる方法で要求データを処理することができ

@RestController 
public class MyServlet { 
    @RequestMapping(value = "test", method = {RequestMethod.GET}) 
    public void testGet(@Valid @RequestParam("foo") String foo) { 
      doStuff(foo) 
    } 
    @RequestMapping(value = "test", method = {RequestMethod.POST}) 
    public void testPost(@Valid @RequestBody MyReq req) { 
      doStuff(req.getFoo()); 
    } 
} 

-1
@RequestMapping(value = "/test", method = { RequestMethod.GET, 
RequestMethod.POST }) 
public void test(@ModelAttribute POJO pojo) { 

//your code 
} 

これはGETとPOSTの両方で機能します。あなたのPOJOが

public class POJO { 

private String parameter1; 
private String parameter2; 

    //getters and setters 

以下のURLを

/テスト以下のようにする必要があります?パラメータ1 =何とか

のようなあなたがリクエストパラメータで

を使用している属性が含まれている必要がGETの場合

このように、GETとPOSTの両方で使用できます。

+1

申し訳ありませんが、それは当てはまりません。それはGETのために働くが、** POSTでは**ではない! – membersound

関連する問題