2011-02-26 3 views
1

にJSONオブジェクトを配置します。ここで正しい方法は、私は私のサーバーは、私のクライアントアプリケーションのPUTコマンドを認識してもらうために、私のPUTリクエストをフォーマット正しくトラブルを抱えていたRESTfulサーバー

は、サーバーにJSON文字列を置き、コードの私の部分です。

try { 
    URI uri = new URI("the server address goes here"); 
    URL url = uri.toURL(); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 
    OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); 
    out.write(gson.toJson(newClient)); 
    out.close(); 
} catch (Exception e) { 
    Logger.getLogger(CATHomeMain.class.getName()).log(Level.SEVERE, null, e); 
} 

と、ここで私が間違って何をやっている

@PUT 
@Consumes("text/plain") 
public void postAddClient(String content, @PathParam("var1") String var1, @PathParam("var2") String var2) { 

PUTコマンドをキャッチすることになっているコードのですか?

答えて

5

また、それはJSONのPUTを行っていることをクライアント側に伝える必要があります。それ以外の場合は、不明なタイプのものをPOSTしようとします(詳細なサーバログでは、それを記録する可能性があります)。 (例外は省略取り扱い。)サーバー側で

URI uri = new URI("the server address goes here"); 
HttpURLConnection conn = (HttpURLConnection) uri.toURL().openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("PUT"); 
conn.addRequestProperty("Content-Type", "application/json"); 
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); 
out.write(gson.toJson(newClient)); 
out.close(); 
// Check here that you succeeded! 

を、あなたはそれはもちろんのこと、それは@Consumes("application/json")宣言したい、とあなたは、おそらく方法は、結果の表現を返すか、それにリダイレクトするかしたい(this SO questionを参照してくださいその問題の議論のために)あなたのメソッドの結果はvoidではなく、値の型かJAX-RS Response(リダイレクトを行う方法です)のどちらかであるべきです。

+0

これは間違ったMIMEタイプとconn.setRequestMethod( "PUT")の組み合わせです。 –

3

おそらくMIMEタイプです。 "application/json"を試してください。

+0

'application/json'は[正式に正しいMIMEタイプです](http://stackoverflow.com/questions/477816/the-right-json-content-type/477819#477819)です。 – MatrixFrog

+0

それは私がそれを探していないために得るものです。ありがとう。 –

+0

また、connectionconn.setRequestMethod( "PUT")を設定する必要があります。 –

関連する問題