Не получается значение JSON в методе Spring Controller

1

Мне нужно отправить некоторые данные с моего устройства Android на свой сервер. Я делаю это через JSON. Я внедрил пост JSON на Android, и я пытаюсь сделать сопоставление на стороне сервера, чтобы получить эти данные. Моя проблема в том, что я продолжаю получать пустую строку.

Android-метод, используемый для отправки JSON:

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").

Может кто-нибудь просветить меня немного здесь? Заранее спасибо.

Теги:
spring
modelattribute

2 ответа

2
Лучший ответ

Вот решение, и оно отлично работает.

на стороне сервера

@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();
            }

        }

  • 0
    Спасибо! Я изменил свою сущность на стороне устройства на nameValuePair, и это сработало.
0

Попробуйте использовать @RequestBody. Он должен работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню