11

私は次のようにレトロフィットを設定してい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 を使用してきれいに印刷するにはどうすればよいですか? ありがとう。

編集:ライブラリを更新しましたが、まだ機能しませんでした

4

5 に答える 5

10

Tanapruk の回答に触発されて、これは私のバージョンのレトロフィット (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)
于 2017-07-19T14:20:10.220 に答える
5

独自のカスタム HttpLogginInterceptor を作成します。

public class CustomHttpLogging implements HttpLoggingInterceptor.Logger {
    @Override
    public void log(String message) {
        final String logName = "OkHttp";
        if (!message.startsWith("{")) {
            Log.d(logName, message);
            return;
        }
        try {
            String prettyPrintJson = new GsonBuilder().setPrettyPrinting().create().toJson(new JsonParser().parse(message));
            Log.d(logName, prettyPrintJson);
        } catch (JsonSyntaxException m) {
            Log.d(logName, message);
        }
    }
}

クライアントで、次を追加します。

OkHttpClient client = new OkHttpClient.Builder()
            .addNetworkInterceptor(new CustomHttpLogging())
            .build();
于 2016-08-22T08:15:58.833 に答える