Как реализовать отправку и получение JSON сервером и клиентом на Android с помощью Spring?
Как реализовать отправку и получение JSON сервером и клиентом на Android с помощью Spring?
Написал такой контроллер на сервере:
@RestController @RequestMapping(value = "/students/") public class AtheniumController { private final AtheniumService service; @Autowired public AtheniumController(AtheniumService service) { this.service = service; } @RequestMapping (value = «student/{studentSurname}, {studentName}, {studentPatronymic}, {studentNumber}», method = RequestMethod.POST) @ResponseBody public String checkLogin(@PathVariable(«studentSurname») String studentSurname, @PathVariable(«studentNumber») String studentNumber, @PathVariable(«studentPatronymic») String studentPatronymic, @PathVariable(«studentName») String studentName) { Student lvStudent = new Student(studentSurname, studentName, studentPatronymic, Long.valueOf(studentNumber)); if (service.checkLogin(lvStudent)) { return «OK»; } else { return «Проверьте введенные данные! (Так же возможна проблема в серверах ДГУ)»; } } @RequestMapping(value = «marks», method = RequestMethod.GET) @ResponseBody public List getMarks() { return service.getMarks(); } @RequestMapping(value = «marks/{id}», method = RequestMethod.DELETE) @ResponseBody public void delete(@PathVariable long id) { service.remove(id); } }
Он получает данные студента с клиента, и проверяет, существует ли такой, если да — то сохраняет в БД. Потом клиент может получить оценки и тд.
Не могу отправить данные с клиента:
public class RequestRegister extends AsyncTask { BufferedOutputStream bos; @Override protected String doInBackground(Student… pStudents) { try { URL url = null; try { url = new URL(Constants.POST_STUDENT); } catch (MalformedURLException pE) { pE.printStackTrace(); } HttpURLConnection urlConnection = null; try { assert url != null; urlConnection = (HttpURLConnection) url.openConnection(); } catch (IOException pE) { pE.printStackTrace(); } assert urlConnection != null; urlConnection.setRequestProperty(«Content-Type», «application/json»); urlConnection.setRequestMethod(«POST»); urlConnection.setDoInput(true); urlConnection.setDoOutput(true); urlConnection.connect(); JSONObject jo = new JSONObject(); jo.put(«studentSurname», pStudents[0].getStudentSurname()); jo.put(«studentSurname», pStudents[0].getStudentName()); jo.put(«studentSurname», pStudents[0].getStudentPatronymic()); jo.put(«studentSurname», pStudents[0].getStudentNumber()); bos = new BufferedOutputStream(urlConnection.getOutputStream()); bos.write(jo.toString().getBytes()); String result = urlConnection.getResponseMessage(); } catch (JSONException | IOException e) { e.printStackTrace(); } finally { try { bos.flush(); //очищает поток output-a bos.close(); } catch (IOException e) { e.printStackTrace(); } //urlConnection.disconnect(); } return null; } }
Написал такой контроллер на сервере:
@RestController @RequestMapping(value = "/students/") public class AtheniumController { private final AtheniumService service; @Autowired public AtheniumController(AtheniumService service) { this.service = service; } @RequestMapping (value = «student/{studentSurname}, {studentName}, {studentPatronymic}, {studentNumber}», method = RequestMethod.POST) @ResponseBody public String checkLogin(@PathVariable(«studentSurname») String studentSurname, @PathVariable(«studentNumber») String studentNumber, @PathVariable(«studentPatronymic») String studentPatronymic, @PathVariable(«studentName») String studentName) { Student lvStudent = new Student(studentSurname, studentName, studentPatronymic, Long.valueOf(studentNumber)); if (service.checkLogin(lvStudent)) { return «OK»; } else { return «Проверьте введенные данные! (Так же возможна проблема в серверах ДГУ)»; } } @RequestMapping(value = «marks», method = RequestMethod.GET) @ResponseBody public List getMarks() { return service.getMarks(); } @RequestMapping(value = «marks/{id}», method = RequestMethod.DELETE) @ResponseBody public void delete(@PathVariable long id) { service.remove(id); } }
Он получает данные студента с клиента, и проверяет, существует ли такой, если да — то сохраняет в БД. Потом клиент может получить оценки и тд.
Не могу отправить данные с клиента:
public class RequestRegister extends AsyncTask { BufferedOutputStream bos; @Override protected String doInBackground(Student… pStudents) { try { URL url = null; try { url = new URL(Constants.POST_STUDENT); } catch (MalformedURLException pE) { pE.printStackTrace(); } HttpURLConnection urlConnection = null; try { assert url != null; urlConnection = (HttpURLConnection) url.openConnection(); } catch (IOException pE) { pE.printStackTrace(); } assert urlConnection != null; urlConnection.setRequestProperty(«Content-Type», «application/json»); urlConnection.setRequestMethod(«POST»); urlConnection.setDoInput(true); urlConnection.setDoOutput(true); urlConnection.connect(); JSONObject jo = new JSONObject(); jo.put(«studentSurname», pStudents[0].getStudentSurname()); jo.put(«studentSurname», pStudents[0].getStudentName()); jo.put(«studentSurname», pStudents[0].getStudentPatronymic()); jo.put(«studentSurname», pStudents[0].getStudentNumber()); bos = new BufferedOutputStream(urlConnection.getOutputStream()); bos.write(jo.toString().getBytes()); String result = urlConnection.getResponseMessage(); } catch (JSONException | IOException e) { e.printStackTrace(); } finally { try { bos.flush(); //очищает поток output-a bos.close(); } catch (IOException e) { e.printStackTrace(); } //urlConnection.disconnect(); } return null; } }
Похожие публикации
Как обмениваться пакетами с сервером мобильной онлайн андроид игры?
Как поднять/настроить DNS сервер на Android?
Как настроить загрузчик Андроида так чтобы он смог загрузиться с сети? Откуда вообще эту информацию брать?
Нет комментариев