kotlin: дооснащение 2 получение 404 URL не найдена ошибка - PullRequest
0 голосов
/ 01 октября 2019

Получение ответа {protocol = http / 1.1, code = 404, message = Not Found, url = https://test.test.com/service/one}

URL-адрес правильный, так как почтальон работает нормально.

Я пытался разобраться в этой ошибке, но большинство вещей возвращаются с URL-адресом был верным. и сама ошибка расплывчата.

код, который запускает его. строитель является допустимой строкой json. Я проверил это в почтальоне.

    CoroutineScope(Dispatchers.Default).launch {

        val call = submitService.submitCarton(builder.toString())
        Log.d("submit", "begining")
        withContext(Dispatchers.Main) {
            if (call.isSuccessful) { 
                Log.d("submit",call.body() as String)

            } else {
                Log.d("submit", "else....")

            }
        }
    }

фабрика обслуживания:

    fun makeSubmitService() : SubmitService{
    val url =  "https://test.test.com/service/"
    return Retrofit.Builder().baseUrl(url)
        .client(okHttpClient).addConverterFactory(GsonConverterFactory.create())
        .build().create(SubmitService::class.java)
}

интерфейс:

interface SubmitService {
@POST("one")
suspend fun submitCarton(@Body json: String): Response<myModel>
}

Ожидаемые результаты - ответ json, однако я не захожу так далеко.

редактировать: я создал okhttpclient и сделал запрос руководства, и я получаю сообщение 200 ок.

код для моего теста

    val JSON = MediaType.parse("application/json; charset=utf-8")
    val client = OkHttpClient()
    val body = "some json"
    val requestBody = RequestBody.create(JSON, body)
    val request = Request.Builder()
            .url("https://test.test.com/service/one")
            .post(requestBody)
            .build()

    client.newCall(request).enqueue(object : Callback {
        override fun onFailure(request: Request, e: IOException) {

            Log.e("test", e.toString())
        }

        @Throws(IOException::class)
        override fun onResponse(response: Response) {

            Log.d("test", response.toString())
        }

    })

1 Ответ

0 голосов
/ 03 октября 2019

Решил сам.

Проблема была тупой, дооснащение2 выдавало 404, хотя веб-служба возвращала сообщение об ошибке.

добавлено

implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'

private val interceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)

private val okHttpClient = OkHttpClient().newBuilder()
    .connectTimeout(1, TimeUnit.MINUTES)
    .readTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(20, TimeUnit.SECONDS)
    .addInterceptor(interceptor)
    .build()

обнаружил, что при модернизации отправляется очень неотформатированная строка

"{ \"all my json filled with \" }" 

вместо

{ json } 

исправлено путем добавления

.addConverterFactory(ScalarsConverterFactory.create())

на мою фабрику услуг

для всех, кто интересуется, почему я в основном создаю json в виде строки вместо использования объекта JSON, потому что служба, с которой я общаюсь, действительно хочет, чтобы она былав очень специфическом порядке, который JSON просто не волнует, однако он хочет, чтобы он тоже выглядел как JSON ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...