1

自分のジャージーレストクライアントに接続するアンドロイドアプリを書いています。HTTP get コマンドは正常に動作しますが、サーバーに何かを送信しようとしている POST に問題があります。405 が返されたので、サーバーがリクエストをリソース メソッドと一致させることができないようです。何かご意見は?以下のテストコード...

レストサーバー

@PUT
@Consumes(MultiPartMediaTypes.MULTIPART_MIXED)
public Response putResponse(MultiPart multiPart) {
    System.out.println(multiPart.getBodyParts());
    return null;
}

アンドロイドクライアント

HttpClient httpclient = new DefaultHttpClient();
HttpPost request = new HttpPost(URL + "responses");
request.addHeader("Content-Type", "multipart/mixed");

MultipartEntity entity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("Testpart1", new StringBody("<testxml></testxml>"));
entity.addPart("image1", new StringBody("imagedata1"));
request.setEntity(entity);
request.addHeader("deviceId", deviceId);
ResponseHandler<String> handler = new BasicResponseHandler();
try {
    String result = httpclient.execute(request, handler);
    Log.i("tag", result);
return result;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    httpclient.getConnectionManager().shutdown();
}
return null;

TCPMon トラフィックは、次の POST /Maintenance_Server/rest/responses HTTP/1.1 Content-Type: multipart/mixed deviceId: xxxxx Content-Length: 244 Host: 127.0.0.1:12345 Connection: Keep-Alive User-Agent: Apache-HttpClient/ を示します。利用不可 (java 1.4)

--jju2JFDOlzJ4LQo7YkrJYLuwDUHmB5b7
Content-Disposition: form-data; name="Testpart1"

<testxml></testxml>
--jju2JFDOlzJ4LQo7YkrJYLuwDUHmB5b7
Content-Disposition: form-data; name="image1"

imagedata1
--jju2JFDOlzJ4LQo7YkrJYLuwDUHmB5b7--

ありがとう

マーク

4

1 に答える 1

0

HTTP POSTを送信していますが、サーバー側ではHTTPPUTのハンドラーのみを宣言しています。したがって、POSTをどのメソッドとも一致させることができないため、405。リソースメソッドのアノテーションを@PUTから@POSTに変更するか、クライアントによるPOSTの代わりにHTTPPUTを送信します。

于 2012-06-16T14:04:40.103 に答える