발생한 오류 1
org.json.JSONException: value 1 of type java.lang.Integer
cannot be converted to JSONObject
발생 원인
=> 해당 URL에 대한 처리 후 서버에서 전달한 리턴 값이 Long 형 (Json으로 날아올 때는 Integer로 인식하나보다) 인데 앱단에서는 요청을 JsonObjectRequest로 날려서, 전달 받을 response의 형태가 JSONObject 형태이기 때문에 발생한 경우였다.
구체적인 상황
서버
앱
해결
// 회원 수정
@PutMapping("/personal/{personalId}")
public Map updatePersonal(@PathVariable Long personalId, @RequestBody PersonalUpdateDto personalUpdateDto) {
Long updateId = personalService.update(personalId, personalUpdateDto);
Map map = new HashMap();
map.put("updateId", updateId);
return map;
}
Map을 만들어서 Id값을 저장하여, 해당 Map을 전달했다.
발생한 오류 2
org.json.JSONException: End of input at character 0 of
위의 발생한 오류1 케이스에서 문제를 타파하기 위해 return을 void로 설정했을 때 발생한 오류.
해결방법은 위처럼 void가 아닌 Map을 리턴하거나 DTO를 만들어서 리턴하면 된다.
발생한 오류 3
NetworkUtility.shouldRetryException: Unexpected response code 415 for
발생원인
발생한 오류1에서의 문제를 해결하기 위해 JsonObjectRequest가 아닌 StringRequest로 리퀘스트 메소드를 변경한 뒤에 Map에 데이터를 담아 전달 했는데 등장한 오류.
Map<String,String>형태로 서버로 전달했는데, 서버에서 받은 @RequestBody의 값은 임의로 생성한 DTO 형태여서 발생한 오류로 추측
구체적인 상황
서버
// 회원 수정
@PutMapping("/personal/{personalId}")
public Map updatePersonal(@PathVariable Long personalId, @RequestBody PersonalUpdateDto personalUpdateDto) {
Long updateId = personalService.update(personalId, personalUpdateDto);
Map map = new HashMap();
map.put("updateId", updateId);
return map;
}
위의 서버 코드와 같다.
앱
해결
// 회원 수정
@PutMapping("/personal/{personalId}")
public Map updatePersonal(@PathVariable Long personalId, @RequestBody Map<String,String> personalUpdateDto) {
Long updateId = personalService.update(personalId, personalUpdateDto);
Map map = new HashMap();
map.put("updateId", updateId);
return map;
}
받아야 되는 데이터 형을 Map형태로 변경시켜준다. => 까다로움 ;;
=> 결론: 서버로 전달하는 데이터 형태가 String들로만 구성이 되어 있다면 StringRequest로 map으로 데이터를 전달하는게 편하겠지만, 아닌 경우는 JsonObjectRequest로 데이터를 전달하는게 편하다는 생각을 했다.
혹은 StringRequest의 map형태로 데이터를 전달하더라도 php 같은 파일로 parsing해주면 쉬울 것 같다는 생각을 했다.
정리
오류에 대한 문제는 아직까지도 어렵다.. 그리고 Volley와 통신 되는 도중에 데이터 형태에 대한 문제도 아직 어렵다..
이 글을 읽는 분이 계시다면, 정확한 정보 전달이 아닌 경험을 통한 오류문제 정리 정도로만 이해해주시면 감사할 것 같습니다. 틀린 부분이 있다면 댓글로 알려주세요 !