簡體   English   中英

從Android的Jersey Resftul Web服務傳遞和接收JSON對象

[英]Pass and receive JSON object from Jersey Resftul webservice from android

場景:將json對象中的用戶名和密碼傳遞給Restful Webservice並獲得一個json對象作為回報。 是的,我知道,它很簡單,但我無法使它正常工作。

我已經嘗試了好幾天了。 到目前為止,我已經嘗試過了:

我寧靜的Web服務代碼

@POST
    @Path("/testJson")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public JSONObject testJson(JSONObject inputJsonObj) throws Exception {

        JSONObject myjson = new JSONObject();

        if(inputJsonObj != null){

        System.out.println("=================================");
        System.out.println("JSON object = " + inputJsonObj.toString());
        System.out.println("=================================");

        }
        else{
            System.out.println("JSON is NULL");

        }

        myjson.put("success", "1");

        System.out.println(myjson.toString());

//        return "string returned";
        return myjson;
    }

在我的Android活動中,代碼是

// POST request to <service>/SaveVehicle
        HttpPost request = new HttpPost(myURL);
        request.setHeader("Accept", "application/json");
        request.setHeader("Content-type", "application/json");
        request.setHeader("user-agent", "Yoda");


        try {
            // Build JSON string
            // JSONStringer vehicle = new JSONStringer().object()
            // .key("getItInputTO").object().key("zipCode").value("90505")
            // .key("financingOption").value("B").key("make")
            // .value("Scion").key("baseAmountFinanced").value("12000")
            // .key("modelYear").value("2010").key("trimCode")
            // .value("6221").key("totalMSRP").value("15000")
            // .key("aprRate").value("").endObject().endObject();

            JSONObject myjson = new JSONObject();
            myjson.put("1", "first");
            myjson.put("2", "second");

            StringEntity entity = new StringEntity(myjson.toString());
            entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json; charset=utf-8"));

            request.setEntity(entity);

            // Send request to WCF service
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
//          HttpResponse response = httpClient.execute(request, localContext);
            HttpResponse response = httpClient.execute(request);

            resCode = response.getStatusLine().getStatusCode();
            Toast.makeText(getApplicationContext(),
                    response.getStatusLine().getStatusCode() + "",
                    Toast.LENGTH_LONG).show();

            if (resCode == 200) {

                Toast.makeText(getApplicationContext(),
                        response.getStatusLine().getStatusCode() + "",
                        Toast.LENGTH_LONG).show();

                HttpEntity entity2 = (HttpEntity) response.getEntity().getContent();
                String text = getASCIIContentFromEntity(entity);

                if(text!=null){

                    JSONObject obj = new JSONObject(text);

                    lblMsg.setText("Successful!");
                }

                // BufferedReader in = new BufferedReader(new
                // InputStreamReader(response.getEntity().getContent()));
                //
                //
                // String line = "";
                // StringBuffer returnFromServer = new StringBuffer();
                //
                // while ((line = in.readLine()) != null) {
                // returnFromServer.append(line);
                // }
                // // Toast what we got from server
                // Toast.makeText(getApplicationContext(),
                // returnFromServer.toString(), Toast.LENGTH_LONG).show();
                //
                // if (entity != null) {
                // entity.consumeContent();
                // }

            }
        } catch (Exception e) {
            // TODO: handle exception
        }

帶注釋的部分顯示了以前的嘗試。

我在服務器控制台上得到的輸出

=================================
JSON object = {}
=================================
{"success":"1"}

我的服務器端接收器json對象沒有填充,我不知道為什么。

注意:

  1. 我的Android清單中有INTERNET和許多其他權限。
  2. 我的網絡服務已啟動並正在運行。
  3. 我擁有所有必需的罐子,例如球衣,json等
  4. 我正在將Tomcat 7用於寧靜的Web服務

我將不勝感激任何幫助。 謝謝

我和你有同樣的問題。 我不知道為什么,但是我正在使用的臨時解決方案是創建一個類來處理這些參數。

這意味着使用Jackson轉換Json Object <=>“ Your Class”

有關更多信息,請參見本教程: http : //www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

==================================

我剛剛發現了這個主題,它可能比上面的解決方案更有用: Jersey POST方法正在接收空值作為參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM