android - 如何在 Retrofit 2 中漂亮地打印?

标签 android gson retrofit2

我用 HttpLoggingInterceptor 进行改造,如下所示:

Gson gson = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
                .setPrettyPrinting() // Pretty print
                .create();

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .build();

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .client(client)
                .build();

在我的 Gson 实例上,我执行了 setPrettyPrinting 并且我仍然得到紧凑的 JSON 输出。 这是我的图书馆。

compile 'com.google.code.gson:gson:2.5'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.okhttp3:okhttp:3.0.1'

如何使用 Retrofit 2 实现 pretty-print 效果? 谢谢。

编辑:更新了我的库,但仍然没有用

最佳答案

受到 Tanapruk 的回答的启发,这就是我所做的,以使其适用于我的 retrofit (2.1.0) 和 okhttp.logging-interceptor (3.8.1) 版本。

此版本适用于打印 JSON 对象和数组。

class ApiLogger : HttpLoggingInterceptor.Logger {
    override fun log(message: String) {
        val logName = "ApiLogger"
        if (message.startsWith("{") || message.startsWith("[")) {
            try {
                val prettyPrintJson = GsonBuilder().setPrettyPrinting()
                    .create().toJson(JsonParser().parse(message))
                Log.d(logName, prettyPrintJson)
            } catch (m: JsonSyntaxException) {
                Log.d(logName, message)
            }
        } else {
            Log.d(logName, message)
            return
        }
    }
}

在客户端:

val httpClientBuilder = OkHttpClient.Builder()
val httpLoggingInterceptor = HttpLoggingInterceptor(ApiLogger())
httpLoggingInterceptor.level = Level.BODY
httpClientBuilder.addInterceptor(httpLoggingInterceptor)

关于android - 如何在 Retrofit 2 中漂亮地打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006664/

相关文章:

java - 无法使用 GSON 库解决 java.lang.NoSuchMethodError

java - gson排除策略仅适用于目标对象的字段

java - 使用 Retrofit2 获取响应主体的空数据?

java - try ... catch 没有捕获 IllegalArgumentException

java - Imageview 未显示来自 URL 的正确图像

android - 按下设备的主页键后,如何始终在图标按下时打开当前 Activity

java - 仅当结果已可用时启动异步任务并在单击按钮时执行操作,否则等待结果然后执行操作

android - 自定义推送通知声音在奥利奥背景下不起作用

android - java.lang.NoClassDefFoundError : After adding Gson dependency and facebook sdk dependency 错误

android - MediaRecorder 捕获的音频文件在使用 Retrofit 2 发送到服务器后损坏