Ответ JSON:
{
"success": false,
"errorMessages": [
"You have to select a maximum load of <span style='color:red;'>0</span> Credit/Course but you have selected <span style='color:red;'>3</span> Credit/Course --- [R060]",
"You can register courses as a full study with a load limit between <span style='color:red;'>12</span> and <span style='color:red;'>18</span> Credit/Course, but you have selected <span style='color:red;'>9</span> Credit/Course --- [R062]"
],
"isConflict": 0
}
но когда isConflict == 1 ответ:
{
"ignoreConflictValue": "W",
"isConflict": 1,
"conflict": [
{
"EXAM_DATE": "01/01/2019",
"START_TIME": "08:00 AM",
"END_TIME": "09:30 AM",
"COURSE_NAME_SL": "مقاومة مواد,تقنيات الحفر البحري",
"COURSE_NAME_PL": "STRENGTH OF MATERIALS,OFFSHORE TECHNOLOGY",
"COURSES_COUNT": "2",
"ACTIVE": "A"
}
],
"success": false
}
Логика этого API такова:
isConflict == 1, свойство успеха - это тип Integer со значениями 1 и 0.Boolean со значениями true и false.Мой вопрос в том, как определить класс POJO для этой ситуации.
Я попытался создать два поля с одинаковым именем с помощью @Nullable для обоих, но Gson жалуется, что POJO имеет повторяющиеся поля.
Я не знаю, тип должен быть одинаковым во всех случаях, но я не могу изменить API.
мой второй вопрос важнее
Вы можете объявить в своем pojo переменную "success" универсального типа "object", а затем использовать экземпляр, чтобы понять, является ли она логическим или целочисленным.
^ не делай этого
@TimCastelijns, почему бы и нет?
@NicolaGallazzi Я не работаю и возвращаю исключение, которое Gson исключил OBJECT и получил НОМЕР
@TimCastelijns Я отредактировал свой вопрос, мне нужно определить 2 поля для обработки, когда isConflict == 1 и isConflict == 0, потому что каждый случай возвращает другой тип, но с тем же именем
используйте список конфликтов, если данных нет, он предоставит список массивов null .. SerializedName ("isConflict") Expose private long isConflict; SerializedName ("конфликт") Раскрыть закрытый список <Conflict> конфликт = null;
Большое вам спасибо, это сработало
В Kotlin вы можете делать следующее:
Определите класс «ApiResponse» с помощью универсальных шаблонов, как показано ниже:
class ApiResponse(@SerializedName("success") val success : Any,
@SerializedName("errorMessages") val errorMessages : Array<Any>,
@SerializedName("isConflict")
val isConflict : Integer)
Затем в своей деятельности используйте Gson для преобразования ответа с помощью
var responseOne = Gson().fromJson(textConflictOneResponse, ApiResponse::class.java)
var responseZero = Gson().fromJson(textConflictZeroResponse, ApiResponse::class.java)
Затем вы можете проверить тип ответа, выполнив:
if (responseOne.success is Boolean){
Log.v(TAG,"Boolean")
} else{
Log.v(TAG,"not boolean")
}
почему два свойства представляют одну и ту же информацию. Также зачем вам создавать POJO с двумя полями с одинаковым именем, если таких полей нет в json