2011-04-26 4 views
4

REST Webサービスで複数のクエリパラメータをPUTする方法を知っていますか? 私はjava.Myカールサンプルを使用して、ライトを持っているが、このようなものです:REST Webサービスで複数のクエリパラメータをPUTする方法

@PUT 
@Path("{user}/{directory:.+}") 
public Response doshare(@PathParam("user")String name, 
     @PathParam("directory")String dir, 
     @QueryParam("name")String sharename, 
     @QueryParam("type")String type){ 
    mongoDAOImpl impl=new mongoDAOImpl(); 
    Mongo mongo=impl.getConnection("127.0.0.1","27017"); 
    DB db=impl.getDataBase(mongo,"public"); 
    DBCollection coll=impl.getColl(db,name); 
    DBCollection coll2=impl.getColl(db,"sharedb"); 
    shareDTO sharedto=new shareDTO(); 
    String authority=type.toLowerCase(); 
    if(authority.equals("rd")){ 
     sharedto.setAuthority("4"); 
    }else if(authority.equals("rw")){ 
     sharedto.setAuthority("12"); 
    } 
    sharedto.setTargetuser(sharename); 
    sharedto.setRealURI("/home/public/"+name+"/"+dir); 
    sharedto.setIdentifier(name); 
    sharedto.setParentURI("/home/public/"+sharename); 
    boolean bool = false; 
    sharefun=new sharefunction(); 
    if(sharefun.checksubfoldershared(coll, coll2, sharedto)){ 
     bool=sharefun.sharefiles(coll, coll2, sharedto); 
    }else{ 
     System.out.println("Error"); 
    } 
    // ... 

しかし、私は名前だけのクエリparameter.Howを取得するか、カールを入力する方法を取得する:

curl -X PUT http://localhost:8080/project/resources/user/directory/sub-directory?name=shareuser&type=Read -v 

私のプログラムですコマンドを使用してすべてのクエリパラメータを取得しますか?

+0

PUTおよびクエリパラメータ?それはいい感じではありません。 –

+0

それを解決するための提案はありますか?私はウィンドウベースのアプリケーションのためのWebサービスを書いています。私はaldyがWebアプリケーションを持っています。 – sudo

+0

下記の私の答えを参照してください。 –

答えて

19

コードは問題ありません。問題はカールを呼び出す方法にあります。 '&'を含むカールするURLを渡すときは、URLの周りに引用符を付ける必要があります。そうでなければ、シェルは別のコマンドとして '&'の後のものを解釈します。

EDIT:私のコメントは、コメントとして投稿すると、私のテキストが狂っています。ここにあなたがする必要があります:

+0

"curl -X PUT http:// localhost:8080/project/resources/user/directory/sub-directory?name = shareuser '&' type = read"を使用してcurlを呼び出しました。しかし、私は例外HTTP "500"を得た。まだ問題があります。私がタイプして読み書きするなら、どうすればいいですか? "?name = shareuser '&' type = read&write" – sudo

+0

いいえ、私が再び書いたものを読んでください。 * URLの前後に引用符*を入れてください。このように:curl 'http://example.com/?a=A&b=B' –

+0

hi mike、同じエラーHttp 500があります。私は次のように書いています:curl -X PUT 'http:// localhost:8080?a = A&b = B ' – sudo

0

-dオプションを試しましたか?例えば

あなたは、すべてのマルチパートアップロードとしてこれを扱う試みることができる
curl -X PUT -d "name=shareuser&type=Read" http://locahost:8080/project/resources/user/directory/sub-directory -v 
+0

はい私は試しましたが、同じエラーが発生しました。多分私のPUT機能が矛盾しているかもしれません。私はコンテナを作成するためのPUT機能も持っています。 – sudo

1

(サーバー側の詳細は標準化されていないと、あなたはので、私はより多くの手がかりを与えることはできません使用しているもの枠組み言わなかった)が、私最初にユーザーとアクセス許可が(のいずれかのパラメータを介して)設定されている理由について質問してください。ユーザーのログイン資格情報を調べて、後で変更できる既定のアクセス許可のセットを使用することで、ユーザーを保存することを忘れないでください。ほとんど安く、は非常にシンプルです。

+0

こんにちは、私はWebサービスのためのフレームワークを使用していません。 WebアプリケーションとしてNetBeanで作成し、POJOクラスでREST Webサービスを作成するだけです。このPUTメソッドは、ユーザーの認証やアップロードではなく、共有機能用です。私はWebサービスを初めて使い、ストレージについてインターンシップを行っています。スーパーバイザーはできるだけ早く仕上げてくれと頼んでいます。だからcoludは何か提案しますか? – sudo

+2

@user:あなたはフレームワークを使用しています。これらの注釈を処理して、すべてを一緒にフックするコードにするものがあります。あなたがNetbeansを使っていることを考えれば、私はおそらくあなたがそれを知らないとしてもJerseyを使用していると思います。ジャージーでのマルチパート処理は、拡張(ジャージーマルチパート)です。 –

関連する問題