2011-06-25 19 views
1

GAEでの残りのWebサービスの開発中です。私はJerseyフレームワークを使ってサービスを実装しています。 POSTサービスで、パラメータも渡す必要があります。私は、アノテーションの2種類を使用しようとしましたが、私はパラメータを取得することはできません。REST Webサービス(JERSEY)でのPOST HTTPリクエストの処理パラメータ

@POST 
@Path("add") 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
public Notification addUser(@QueryParam("nickname") String nickname, @QueryParam("name") String name, @QueryParam("surname") String surname, @QueryParam("telephone") String telephone, @QueryParam("email") String email) { 
    User =createUser(nickname, name, surname, telephone, email); 
    ...... 
} 

@QueryParam

@POST 
@Path("add") 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
public Notification addUser(@Context UriInfo uriInfo){ 
    MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
    String nickname = queryParams.getFirst("nickname"); 
    String name = queryParams.getFirst("name"); 
    String surname = queryParams.getFirst("surname"); 
    String telephone = queryParams.getFirst("telephone"); 
    String email = queryParams.getFirst("email"); 
    User =createUser(nickname, name, surname, telephone, email); 

    ....... 
} 

@Contextしかし、両方のケースで、私はすべてのパラメータを取得することはできませんそれらの値はヌル値です。

これは私のHTTPリクエストの例である:私は何かが欠けていた場合

Request URL: http://windyser.appspot.com/rest/users/add 
Request Method: POST 
Params: {"nickname":"prova","name":"danilo","surname":"delizia","email":"[email protected]","telephone":"123"} 
Sent Headers 
Accept: */* 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Accept-Language: en 

誰もが知っていますか?あなたの助けを事前に

おかげ

ダニーロ

答えて

2

桟橋8.xのは、Java EE 6をサポートしており、桟橋7.xのは、「私はあなたが使用してあなたの最初のコードスニペットから参照のみのJava EE 5 サポートしています@Produces "アノテーションをJava EE 6から削除する必要があります。

は修正するには:

  1. はアノテーション - または -
  2. 使用するJava EE 5施設のみをサポートするための突堤8.xのにバンドルGAE SDKを使用していることを確認してください。

[EDIT]

は、サービスを使用すると、文字列パラメータを消費する必要があることを知ってみましょう。

URL url = new URL("http://[HOST]:[PORT]/[CONTEXT]/?nickname=prova"); // Your parameter 
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
conn.setDoOutput(true); 
conn.setDoInput(true); 
conn.setRequestMethod("POST"); 
conn.connect();    

// Get the response 
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String line; 
while ((line = rd.readLine()) != null) { 
    System.out.println(line); // Your service's response 
} 
rd.close(); 
conn.disconnect() 

・ホープ、このことができます:あなたがサービスにアクセスする必要がある場合には、次の

@POST 
@Path("/add") 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
@Consumes("application/x-www-form-urlencoded") // to consume String parameters 
public Notification addUser(@FormParam("nickname") String nickname) {   
    ...... 
} 

:@Consumesランタイムアノテーションを使用してみてください。

+0

こんにちはSurlac、私は@Consumes( "text/plain")と@Consumes( "application/x-www-form-urlencoded")注釈で言ったように試みましたが、それでも動作しません。最初のケースでは、GAEから「Unsupported Media Type」を取得します。そして、2番目のケースはnullパラメータを取得します。どのように私はそれを行うことができますか? – ddelizia

+2

答えに記載されているように、POSTメソッドのシグネチャで@FormParamを使用してみてください。 – surlac

+0

このソリューションは感謝しました!!ダニロ – ddelizia

関連する問題