В тексте запроса ниже количество значений «questionOne», «questionTwo» и т. д. меняется для каждого учащегося. Как я могу динамически генерировать тело запроса в соответствии с изменяющимся значением ключа и значения.
Образец запроса один
"quiz": {
"name":"Jacob",
"sid": "STD_500",
"questionOne":"",
"questionTwo":""
}
Образец запроса два
"quiz": {
"name":"Annie",
"sid": "STD_200",
"questionOne":"",
"questionTwo":""
"questionThree":"",
"questionFour":""
}
Класс данных:
data class Quiz (
val name : String?,
val sid : String?,
val questions: HashMap<String, String>?
)
Вопросы должны быть в массиве json. Пример:
"quiz": {
"name":"Jacob",
"sid": "STD_500",
"questions" : [
{"key": "questionOne", "value": ""},
{"key": "questionTwo", "value": ""},
]
}
Я полагаю, что единственным способом было бы определить викторину как HashMap
вместо Quiz
объекта.
Я предполагаю, что у вас сейчас есть RequestBody
что-то вроде этого?
data class RequestBody(
val quiz: Quiz
)
Затем измените его на
data class RequestBody(
val quiz: HashMap<String,String>
)
Но это такой плохой дизайн, я предлагаю выработать с бэкэндом решение, предложенное в ответе Торнике.
Судя по вашему описанию, это плохое дизайнерское решение с внутренней стороны. У вас должен быть вопрос с одним параметром, по которому вы будете передавать список классов вопросов, подобных этому.
Сначала создайте отдельный класс данных Вопрос
data class Question (
val key:String,
val value:String)
чем установить список этого класса данных как параметр типа вопросов в модели запроса, подобной этой
data class Quiz (
val name : String?,
val sid : String?,
val questions:List<Question>
)
Я предполагаю, что вы используете библиотеку Gson для преобразования классов данных в json и наоборот.
Решение для данной ситуации состоит в том, чтобы создать отдельные модели запросов для каждого количества вопросов, которые вы отправляете в BE,
НО я бы настоятельно советовал не делать этого и заставить парней из бэкенда изменить работу вашего API.
серверная часть ожидает и возражает, как показано в вопросе