当前位置: 首页 > 知识库问答 >
问题:

如何获取Kotlin中改型的原始json响应?

滕弘新
2023-03-14
base url = "https://devapis.gov/services/argonaut/v0/" 
method = "GET"
resource = "Patient"
param = "id"
val patientInfoUrl = "https://devapis.gov/services/argonaut/v0/"

        val infoInterceptor = Interceptor { chain ->
            val newUrl = chain.request().url()
                    .newBuilder()
                    .query(accountId)
                    .build()

            val newRequest = chain.request()
                    .newBuilder()
                    .url(newUrl)
                    .header("Authorization",accountInfo.tokenType + " " + accountInfo.accessToken)
                    .header("Accept", "application/json")
                    .build()

            chain.proceed(newRequest)
        }

        val infoClient = OkHttpClient().newBuilder()
                .addInterceptor(infoInterceptor)
                .build()

        val retrofit = Retrofit.Builder()
                .baseUrl(patientInfoUrl)
                .client(infoClient)
                .addConverterFactory(GsonConverterFactory.create())
                .build()

        Logger.i(TAG, "Calling retrofit.create")
        try {
            // How to get json data here
        }catch (e: Exception){
            Logger.e(TAG, "Error", e);
        }
        Logger.i(TAG, "Finished retrofit.create")

    }

如何获得原始json输出。如果可能的话,我不想实现用户数据类和解析器。有什么办法吗?

标记重复的帖子(获得原始HTTP响应与改造)不是为Kotlin和我需要Kotlin版本。

共有1个答案

柴英光
2023-03-14

这是相当容易的,您只需要使您的网络调用功能这样。

@FormUrlEncoded
@POST("Your URL")
fun myNetworkCall() : Call<ResponseBody>

这里的重点是您的网络调用应该返回responsebody类型的调用。并且可以从responsebody中获得字符串格式的响应。

现在,当您将调用这个函数来执行网络调用时,您将得到原始字符串响应。

    MyApi().myNetworkCall().enqueue(object: Callback<ResponseBody>{
        override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
            //handle error here
        }

        override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
            //your raw string response
            val stringResponse = response.body()?.string()
        }

    })
 类似资料:
  • 我可以很容易地得到消息,但我不能从响应中得到“他”数组。 下面是我的数据模型类 这就是我向服务器发送请求的方式:

  • 问题内容: 有没有办法从获取原始/原始JSON值? 问题: 现在是,但是我需要原始字符串。 有没有办法获得这个原始价值?另外,我无法更改创建方式(例如更改设置),因为它作为参数传递给我的课程… (参考:原始的NJsonSchema问题) 问题答案: 您无法获取原始字符串,无法识别日期字符串并将其转换为自身内部的结构。如果您这样做,则可以看到以下内容: 但是,您可以通过执行以下操作以ISO 8601

  • 如何将此Json响应转换为改装bean我得到了Gson错误,就像使用JsonReader一样。setLenient(true)在第1行第1列路径接受格式错误的JSON$ api调用为 字符串CATEGORY\u API=“”https://api.callingservice.com"; 请帮助我解决这个问题,如何将Json响应转换为Bean,我的Bean类如下

  • 问题内容: 如果浏览到,我希望得到以下JSON响应: 但是,如果我使用selenium 我懂了 HTML标记来自哪里?如何从获得HTTP请求的原始JSON响应? 问题答案: 除了原始JSON响应外,还包含HTML以在浏览器中“漂亮地打印”响应。如果使用Firefox DOM和Style Inspector在浏览器中查看JSON响应的源,您将得到相同的结果。 要获取原始JSON响应,您可以照常浏览H

  • 在referfit中,您只能读取response.body()一次,因为它是一个流,一旦调用或自动转换为返回类型中的任何模型类,它就会自动关闭。如果你尝试读两次,那么你会得到上面的错误。 我既需要原始响应字符串,也需要模型类。做这件事最好的方法是什么?我不想调用两次API。有什么方法可以复制响应体吗?理想情况下,我希望简单地获取String并返回响应。也就是说,不必放弃改型带来的通用类型转换器的好

  • 问题内容: 我将sqlalchemy用作我的orm,并用作Base。 我的问题是,如何知道用户已被修改,以及如何在不再次查询数据库的情况下获取原始值? 提前致谢! 更新 我发现一种方法可以获取字段的历史值,但是我不确定它是否适合我的目的。 因此,我们可以检查的值,但这是最好的方法吗? 问题答案: \要查看是否已修改,可以检查是否。如果它是您要撤消它,则可以执行 但是请注意,这会将会话的所有内容回滚