Несмотря на то, что я не уверен на 100%, если это ваша проблема, поскольку загруженная вами документация по серверу неполная, я уверен, что проблема в том, что сервер просит вас отправить данные задачибыть созданным с использованием MIME-типа application/x-www-form-urlencoded
, поэтому он говорит formdata
справа от конечной точки Создать задачу на изображении, которое вы загрузили вместе с документацией сервера.
Однако вы используете @Body tasks: TaskListContainer
, который вместо этого отправляет информацию о новой задаче в виде данных JSON application/json
. (@ аннотация тела)
Это то, что вы делаете
Я проверил вашу конечную точку с помощью Почтальон , используя application/json
в качестве Content-Typeвашего запроса.Именно этим занимается сейчас Retrofit, поскольку вы использовали аннотацию @Body
в сервисе Retrofit.
Это то, что вы должны сделать вместо этого
Теперь, если я отправлю запрос POST с почтальоном, но с использованием типа form-data
, с полем с ключом task
и значением String, представляющим имязадача, которая будет создана, я получаю успешный ответ.
Чтобы сообщить Retrofit отправить запрос POST, какдля этого вы должны определить свой метод saveTask
следующим образом:
interface Service {
...
@Headers("user: joan")
@FormUrlEncoded
@POST("task")
fun saveTask (@Field("task") taskname: String) : Call<Task>
...
}
Более подробную информацию о @FormUrlEncoded аннотации вы можете найти в официальной документации .
Также, как сказал @YuriPopiv, вам не хватает последней косой черты в вашем baseUrl
.Попробуйте установить его следующим образом .baseUrl("http://taskdemoserver.pythonanywhere.com/")
или определить конечную точку, начиная с ведущего /
.
Начиная с документы :
Базовые URL-адреса всегда должны заканчиваться на /.Завершающий / гарантирует, что значения конечных точек, которые являются относительными путями, будут правильно добавляться к базе, имеющей компоненты пути.