2017-05-31 19 views
0

REST TEMPLATEのPOSTメソッドを使用したAndroid Webサービスで、パラメータが少なく、オブジェクトが2つあるサーバーにオブジェクトを送信しようとしています。これらの2つのオブジェクトは、いくつかのパラメタと3つの異なるオブジェクトのリストを含み、それらの3つのオブジェクトのリストは、それらの中のパラメータをほとんど含まず、1つのバイト配列のみを含むオブジェクトのリストを含む。org.springframework.web.client.HttpClientErrorException:415サポートされていないメディアタイプ[EDITED]

ピック1 [主な目的(私が送信しようとしています1)]:

Main Object(The one I am trying to send)

ピック2 [オブジェクトの3つのリストを備える主な目的内部オブジェクト]:下の写真のように

Object inside the Main Object comprising 3 Lists of Objects

ピック3【同様に他の2(収容&その他)にとって内側別のオブジェクトの1つのリストを含むリストなどのオブジェクト、]:

An Object as List comprising 1 List of Another Object inside it, likewise for the other 2(Accommodation & Others)

ピック4 [単独byreアレイパラメータを含むサブオブジェクト内のオブジェクトのリスト]:

List of Object inside the sub-Object containing a byre array parameter alone

とウェブサービスのPOSTメソッドのための私のコード:

public static final String capUrl = "http://192.168.1.7:8084/CAPWS"; 

public Expenses setExpensesByBatch(Expenses expenses) { 

    try { 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     RestTemplate restTemplate = new RestTemplate(); 
     restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
     restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
     restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory()); 

     List<HttpMessageConverter<?>> list = new ArrayList<HttpMessageConverter<?>>(); 
     list.add(new MappingJacksonHttpMessageConverter()); 
     restTemplate.setMessageConverters(list); 


     String b = restTemplate.postForObject(capUrl + "/UX/", expenses, String.class); 

     Log.e("String ===============b", b + "  ++++"); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.e("expObjPost_WsCli_EX", e.toString()); 
    } 
    return expenses; 
} 

私はそれを返しますorg.springframework.web.client.HttpClientErrorException: 415 Unsupported Media Type

下記のマイLOGCAT

LOGCAT

私のサーバー側のコード:

@RequestMapping(value = CapRestURIConstants.UPDATEEXPENSES, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody 
String updateExpenses(@RequestBody Expenses expenses) { 
    String response = "true"; 

    System.out.println("incoming--------" + "UPDATEEXPENSES"); 
    try { 
     if (expenses != null) { 
      //System.out.println("expenses--------" + expenses); 

      int catType = expenses.getCategoryType(); 
      String categoryType = String.valueOf(catType); 

      String categoryId = expenses.getCategoryId(); 
      String batchId = expenses.getBatchId(); 

      System.out.println("categoryType--------" + categoryType); 
      System.out.println("categoryId--------" + categoryId); 
      System.out.println("batchId--------" + batchId); 

      Batch batch = getBatchById(batchId); 
      if (batch != null) { 

       expenseDataNew(batch, expenses); 
       expenseImagesNew(batch, expenses); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     response = "faslse"; 
    } 
    return response; 
} 

public void expenseDataNew(Batch batch, Expenses expenses) { 

    Session session = null; 
    Transaction transaction = null; 
    Gson gson = new Gson(); 

    try { 

     LinkedTreeMap masterMap = (LinkedTreeMap) gson.fromJson(batch.getMasterJson(), Object.class); 
     LinkedTreeMap expenseObject = (LinkedTreeMap) masterMap.get("2007"); 

     masterMap.replace(expenseObject, expenses); 
     String masterJson = gson.toJson(masterMap); 
     batch.setMasterJson(masterJson); 

     session = HibernateUtil.getSessionFactory().openSession(); 
     transaction = session.beginTransaction(); 
     session.saveOrUpdate(batch); 

     transaction.commit(); 

    } catch (Exception e) { 
     if (transaction != null) { 
      transaction.rollback(); 
     } 
     e.printStackTrace(); 
    } finally { 
     if (session != null) { 
      session.close(); 
     } 
    } 
} 

public void expenseImagesNew(Batch batch, Expenses expenses) { 

    Session session = null; 
    Transaction transaction = null; 
    Gson gson = new Gson(); 

    try { 

     // DIVERTING TO IMAGE DB 
     session = ImageHibernateUtil.getSessionFactory().openSession(); 
     transaction = session.beginTransaction(); 

     if (expenses != null) { 


      int catType = expenses.getCategoryType(); 
      String categoryType = String.valueOf(catType); 
      System.out.println("categoryType--------" + categoryType); 

      String categoryId = expenses.getCategoryId(); 
      System.out.println("categoryId--------" + categoryId); 

      String travelExpenseImgId = "f257f225-41da-11e7-be05-001d92ba9634"; 
      String accommodationExpenseImgId = "204b4baf-41db-11e7-be05-001d92ba9634"; 
      String otherExpenseImgId = "45d31872-41db-11e7-be05-001d92ba9634"; 

      AssessorExpense assessorExpense = expenses.getAssessorExpense(); 
      TCExpense tCExpense = expenses.getTcExpense(); 

      Boolean isTravel, isAccomadation, isOthers; 

      List<Travel> travelList; 
      List<Accomadation> accommodationList; 
      List<Others> othersList; 

      ArrayList proof; 
      Expense expense; 
      ExpenseImage expenseImage; 

      // categoryType: 1 = Assessor 
      // categoryType: 4 = TC 
      if (categoryType.equals("1")) { 

       if (assessorExpense != null) { 

        isTravel = assessorExpense.isTravel(); 
        if (isTravel) { 

         travelList = (ArrayList) assessorExpense.getTravel(); 
         System.out.println("travelList.size()==" + travelList.size()); 

         expense = getExpense(travelExpenseImgId); 
         System.out.println("expense==travel==1==:" + expense); 
         String expenseStr = String.valueOf(expense); 
         System.out.println("expenseStr==travel==1==:" + expenseStr); 


         for (Travel travel : travelList) { 

          List<ExpenseImageObject> expenseImageObjects = (ArrayList) travel.getExpenseImageObjects(); 
          System.out.println("travel==expenseImageObjects.size()== :" + expenseImageObjects.size()); 

          for (ExpenseImageObject image : expenseImageObjects) { 

           System.out.println("expense===travel==for==:" + expense); 

           expenseImage = new ExpenseImage(); 

           expenseImage.setBatchId(batch.getBatchId()); 
           expenseImage.setCategoryId(expenses.getCategoryId()); 
           expenseImage.setExpimgId(expenseStr); 
           expenseImage.setImage(image.getImage()); 
           expenseImage.setStatus(1); // dummy status 1 - Travel, 2 - Accommodation, 3 - Other 

           session.saveOrUpdate(expenseImage);          
          } 
         } 
        } 
       } 
      } 
     } 
     transaction.commit(); 

    } catch (Exception e) { 
     if (transaction != null) { 
      transaction.rollback(); 
     } 
     e.printStackTrace(); 
    } finally { 
     if (session != null) { 
      session.close(); 
     } 
    } 
} 

は、私が実際にサーバへの各リストの写真のほか、リストなどのデータのリストでオブジェクトを送信しようとしています。 いくつかのウェブサイトと、エラーに関するほとんどすべてのトピックがStack Overflowにあります。この問題は1週間以上続いています。私はいくつかの助けを見つけることを望むと思います。

+0

エンドポイントが期待していることを確認する必要があります。 – user2447161

+0

'org.springframework.web.client.HttpClientErrorException:415 Unsupported Media Type'というエラーが表示されます。私はサーバ側のログも取得しません。 – sam

答えて

0

研究や専門家の提案の地獄の多くの後、私はようやく私の問題への解決策を見つけることができました。問題はコードではありません。実際には完璧です。問題は、&を取得するために使用するオブジェクトです。私はNetBeansをサーバーサイドコーディングに使用しています。私がやったことは、私がパラメータゲッター&セッターコピー、Androidのスタジオで私の必要なオブジェクトを作成し、NetBeansの、Objectクラスでそれらを貼り付け、でした。問題は、私が使ってきたブーリアンでした。 ブールは、に作成されました。でサポートされていない場合があります。これは、サーバーに当たらないようにNetBeansでサポートされていません。そして、専門家の助言を得た後、私はNetBeansの上のオブジェクトの作成は、パラメータをコピーしゲッター&セッターのAndroid Studioの Objectクラスでそれらを貼り付けました。そしてそれはうまくいった。この問題を解決するのに2週間以上かかりました。これはいくつかの助けになると思う。

0

変更

reqが実際のボディには、サーバーに送信され

UPDATEにコンテンツタイプを指定するには、この

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_JSON); 
headers.add("Accept","application/json;charset=utf-8"); 

RestTemplate restTemplate = new RestTemplate(); 
... 
HttpEntity request = new HttpEntity(req, headers); 
responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, 
    String.class); 

のようなものへの呼び出し。例えば、

MultiValueMap<String, Object> req ... 

実際にリクエストの本文とヘッダーを送信しました。

+0

最後の2行を詳しく教えてください。 'HttpEntity request = new HttpEntity(req、headers); responseEntity = restTemplate.exchange(URL、HttpMethod.POST、リクエスト、 String.class); ' – sam

+0

回答が更新されました – StanislavL

0

"HttpHeaders"を使用して、コンテンツタイプヘッダーを、エンドポイントが想定しているものに明示的に設定してみてください。 次に、ヘッダークラ​​スとボディクラスの両方で "HttpEntity"を使用します。 例:

HttpHeaders requestHeaders = new HttpHeaders(); 
    requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 
    HttpEntity<String> httpEntity = new HttpEntity<>("my body", requestHeaders); 

    byte[] response = restTemplate.postForObject(
      "URL", httpEntity, byte[].class); 
関連する問題