2011-10-15 1 views
2

からのparamsを取得します。 http://localhost:8080/TestSomeWay/resources/test/create?meg=sadasd&name=sadasd とurlparams EXPからのparamsを取得する「MEG」&「名前」 私が開発にジャージを使用しています安らかpostメソッド それは コードそれを作らない用量:あなたはあなたがすると混同しているように見えるあなたがジャージー残りの使用Postメソッドと私のように、残りapi.suchを開発したいURL

答えて

5

をしたい機能を得るために、代わりにFormParamQueryParamをすべき

@POST 
@Path("/create") 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
@Produces(MediaType.TEXT_PLAIN) 
@Override 
public String create(@FormParam("meg")String megString, @FormParam("name")String nameString) { 
    TestUser testUser=new TestUser(); 
    testUser.setMeg(megString); 
    testUser.setName(nameString); 
    em.persist(testUser); 
    em.flush(); 
    return testUser.getId().toString(); 

} 
0

をあなたが達成しようとしているもの、そしてそれは非干渉的なAPIとして現れています。あなたがそのように間違ってしまったら、物事がうまくいかないことが少し不思議です!

まず、GET、PUT、POSTのどちらを使用しているのか、後者の2つのケースでは、消費しているコンテンツタイプ(またはタイプ)はPUTとPOSTは通常、受信した文書を処理します。さらに、あなたが冪等でないもの(つまり、同じように2回連続して「同じ」となるように)を実行している場合は、間違いなくPOSTを使用する必要があります。古典的な例では、いくつかの商品を払っています。これは、二度したくないものですが、あなたの好みを設定することは、冪等になる可能性があります。最終的な複雑さは、クエリパラメータを本体と混在させることは通常は悪いスタイルです。パラメータがクエリ部分にあるか、またはそれらが本体にあるか(パスに含まれていますが、その場合、概念的には異なるリソースを扱っています)。あなただけのHTMLフォームを扱っている場合は

、あなたがたいと思う方法の2つのスタイルはこのようになります。

@GET 
@Path("/create") 
@Produces(MediaType.TEXT_PLAIN) 
public String createFromGet(
     @QueryParam("meg") String meg, 
     @QueryParam("name") String name) { 
    ... 
    return theString; 
} 
@POST 
@Path("/create") 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
@Produces(MediaType.TEXT_PLAIN) 
public Response createFromPost(
     @FormParam("meg") String meg, 
     @FormParam("name") String name) { 
    ... 
    return Response.created(theNewUrl).entity(theString).build(); 
} 

/create?meg=foo&name=barのようなURLにGETして最初の取引と2番目は/createのようなURLへのPOSTを処理します。しかし、「create」という名前が与えられていると、私はPOSTバージョンを使用するだけで、クエリ部分のパラメータのエンコーディングをサポートしないようにすることができます。創造は、偶然ではない傾向があるものの一つです。

あなたの作成がリソースを作っていると思っています(それは良いRESTfulなプログラミングです!)ので、正しい種類の応答を返すように調整しました。それは通常より少し複雑ですが、まさに正しいことです。

関連する問題