【问题标题】:Not getting JSON value in Spring Controller method在 Spring Controller 方法中未获取 JSON 值
【发布时间】:2012-05-25 13:17:38
【问题描述】:

我需要将一些数据从我的 Android 设备发送到我的服务器。我正在通过 JSON 执行此操作。我已经在 Android 上实现了 JSON 帖子,并且我正在尝试在服务器端进行映射以检索该数据。我的问题是我不断得到一个空字符串。

用于发送 JSON 的 Android 方法

private void sendJson(final String json, final String URL) {
    Thread t = new Thread(){
    public void run() {
            Looper.prepare(); //For Preparing Message Pool for the child Thread
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
            try{
                HttpPost post = new HttpPost(URL);
                StringEntity se = new StringEntity(json);  
                se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                post.setEntity(se);
                client.execute(post);
            }
            catch(Exception e){
                e.printStackTrace();
            }
            Looper.loop(); //Loop in the message queue
        }
    };
    t.start();      
}

服务器端方法:

@RequestMapping(value = "/getLatestCalls", method = RequestMethod.POST)
public void getData(@ModelAttribute String json){
    //... do something 
}

问题是,在这种方法中,我的 json 字符串每次都是“”。我也尝试过使用@RequestParam,但它不再进入该方法。我也试过@ModelAttribute("json")

有人可以在这里给我一点启发吗?提前谢谢你。

【问题讨论】:

    标签: java android json spring modelattribute


    【解决方案1】:

    这是解决方案,效果很好。

    服务器端

    @Controller
        public class DataCollector {
    
            @RequestMapping(value = "/clientdatacollector", method = RequestMethod.POST)
            public @ResponseBody
            void abc(Writer writer, @RequestParam("gpsdata") String gpsJSON) {
    
    
    
                try {
                    // here is your jsonstring ;)
                    writer.write(gpsJSON.toString());
    
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
            }
    
        }
    

    客户端

     public static void httptest() {
                ArrayList<TravellingData> tdArray = new ArrayList<TravellingData>();
                Gson gson = new Gson();
                String jsonString = "";
                for (int i = 0; i < 1; i++) {
                    tdArray.add(ObjectCreater.createMockTravellingDataObject());
                }
    
                jsonString = gson.toJson(tdArray);
    
                HttpClient client = new DefaultHttpClient();
    
                HttpPost post = null;
                try {
                    post = new HttpPost(
                            "http://localhost:8080/uygulama/clientdatacollector");
                } catch (URISyntaxException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                try {
                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                    nameValuePairs.add(new BasicNameValuePair("gpsdata", jsonString));
                    post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    
                    HttpResponse response = null;
                    try {
                        response = client.execute(post);
                    } catch (HttpException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    BufferedReader rd = new BufferedReader(new InputStreamReader(
                            response.getEntity().getContent()));
                    String line = "";
                    while ((line = rd.readLine()) != null) {
                        System.out.println(line);
                    }
    
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
    

    【讨论】:

    • 谢谢!我已将设备端的实体更改为 nameValuePair 并且它有效。
    【解决方案2】:

    尝试使用@RequestBody。它应该工作。

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多