2017-02-08 12 views
1

おはようございます!REST POSTリクエストはJavaでは動作しませんが、RESTクライアントで動作します

C#でRESTサービスを作成しましたが、アンドロイドスタジオからURLに投稿リクエストを送信しようとしています。私のURLには現在、GETとPOSTという2つのメソッドがあります。 GETメソッドは正常に動作し、私はアンドロイドから問題なく使用できます。しかし、それがPOST要求になると私はアンドロイドからそれを使用することはできません。

私はRESTクライアントのクロムアドオンを使用してPOSTメソッドをテストしました。要求がうまく動作しているように見えます。メソッドにアクセスしてコードの実行に必要なものを実行できます。

リクエストデータ:

Request data

Request応答:C#のAPI以下

Request response

[RoutePrefix("api/leads")] 
    public class LeadsController : ApiController 
    { 
     // GET: api/Leads/5 
     public List<Lead> Get(string matricula, int tipo) 
     { 
      List<Lead> leads = new List<Lead>(); 

      //Fills the list 

      return leads; 
     } 

     [HttpPost] 
     // POST: api/Leads 
     public bool Post(int id, string usuario, string latitude, string longitude) 
     { 
      //Do stuff 

      return true; 
     } 
} 

そして最後に、ではなく、少なくとも証拠の下、私はJavaコードです

@Override 
    protected String doInBackground(String... strings) { 
     URL url = null; 
     try { 
      String newUrl = getNewUrl(); 

      StringBuilder postData = new StringBuilder(); 

      for (Map.Entry<String,Object> param : params.entrySet()) { 
       if (postData.length() != 0) postData.append('&'); 
       postData.append(URLEncoder.encode(param.getKey(), "UTF-8")); 
       postData.append('='); 
       postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8")); 
      } 

      url = new URL(newUrl); 

      byte[] postDataBytes = postData.toString().getBytes("UTF-8"); 

      HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
      conn.setDoOutput(true); 
      conn.setDoInput(true); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
      conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); 


      conn.getOutputStream().write(postDataBytes); 

      int responseCode = conn.getResponseCode(); 
      if(responseCode == HttpURLConnection.HTTP_OK){ 
       server_response = readStream(conn.getInputStream()); 
      } 

     } catch (MalformedURLException e) { 
      listener.onPostResponse(false, e.getMessage(), this.tipoAcesso); 
     } catch (UnsupportedEncodingException e) { 
      listener.onPostResponse(false, e.getMessage(), this.tipoAcesso); 
     } catch (ProtocolException e) { 
      listener.onPostResponse(false, e.getMessage(), this.tipoAcesso); 
     } catch (IOException e) { 
      listener.onPostResponse(false, e.getMessage(), this.tipoAcesso); 
     } 
     return null; 
    } 

URL法getNewUrl()の戻りがあること: "https://cliente.teleatlantic.com.br/CheckinLeads/api/Leads/" POSTリクエストを使用して。

パラメータは次のとおりです。 "usuario = FERNANDOCHAVES &緯度= & -46.6903502経度= -46.6903502 & ID = 265857"

I定着の方法を(このフォーラムを含む)すべてのインターネット上で精力的に見てきました私のPOST要求の問題。しかし、私が見つけた解決策のどれもが私の問題を解決しませんでした。

これまでに試したこと:
1.「?」を入力してください。 POSTリクエストで送信されるパラメータの前に
2.「/ CheckinLeads/api/Leads」を追加しますか?パラメータの前に
3. HttpURLConnectionの代わりにHttpClientを使用するようにコードを変更します。
4.コンテンツデータを "text/json"に変更します。
5. HttpURLConnectionとHttpClientで多くの「使用可能な」関数。

私はjava/androidに新しいですし、どんな助力にも感謝します。
私は4.4 Android KitKat SDKバージョン24を使用しています。
ご注意いただきありがとうございます!宜しくお願いします。

----- ----- EDIT
コードクラッシュしません。しかし、リクエストのHttpURLConnection.getResponseCodeをチェックすると、404が表示されます。しかし、送信したURLとパラメータは、RESTクライアント内でテストするのに同じものです。

+0

を見て '私は正確にどのようにandroid'からそれを使用することはできませんよ?正確に何が間違っていますか?それはクラッシュしますか?間違った結果を返しますか?エラーを返しますか?... –

+0

これはクラッシュせず、サーバーに到達しません。私がHttpUrlConnection.getResponseCode();をチェックする場合、それは私に404を示しています。しかし、リクエストURLとパラメータは正しいです。私は何が欠けているのか分かりません。 – Abner

+0

は、には、Android https://cliente.teleatlantic.com.br/CheckinLeads/api/Leads?usuario=FERNANDOCHAVES&latitude=-46.6903502&longitude=-46.6903502&id=265857 のContent-Type = "から一度静的URLの下に呼び出すことができますapplication/x-www-form-urlencoded " –

答えて

2
Change the api code 

public class test { 
public int id {get;set;} 
public string usuario {get;set;} 
public string latitude {get;set;} 
public string longitude { get; set; } 
} 

[HttpPost] 
// POST: api/Leads 
public bool Post(test objTest) 
{ 
//Do stuff return true; 
} 
1

サーバーにデータをポストしていますが、パラメータがJSON形式でないため、application/x-www-form-urlencodedを使用してパラメータをエンコードする必要があります。

試してみてください。

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

そしてthis

+0

私は前にこのプロパティを設定しようとしただけで動作しません。依然としてリクエストに対する応答として404を取得しています。 – Abner

関連する問題