@Override public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { JsonAdapter<?> adapter = moshi.adapter(type, jsonAnnotations(parameterAnnotations)); if (lenient) { adapter = adapter.lenient(); } if (failOnUnknown) { adapter = adapter.failOnUnknown(); } if (serializeNulls) { adapter = adapter.serializeNulls(); } return new MoshiRequestBodyConverter<>(adapter); }
@Override public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { JsonAdapter<?> adapter = moshi.adapter(type, jsonAnnotations(annotations)); if (lenient) { adapter = adapter.lenient(); } if (failOnUnknown) { adapter = adapter.failOnUnknown(); } if (serializeNulls) { adapter = adapter.serializeNulls(); } return new MoshiResponseBodyConverter<>(adapter); }
/** * Parses an error body and code into an {@link ApiError}. * * @param errorBody the error body from the response. * @param statusCode the status code from the response. * @param message the message from the response. * @return the parsed {@link ApiError}. */ @Nonnull public static ApiError parseError(@Nullable String errorBody, int statusCode, @Nullable String message) { if (errorBody == null) { return new ApiError(null, statusCode, message); } Moshi moshi = new Moshi.Builder().build(); JsonAdapter<CompatibilityApiError> oldApiErrorJsonAdapter = moshi.adapter(CompatibilityApiError.class).failOnUnknown(); try { return new ApiError(oldApiErrorJsonAdapter.fromJson(errorBody), statusCode); } catch (IOException | JsonDataException exception) { // Not old type of error, move on } JsonAdapter<ApiError> apiErrorJsonAdapter = moshi.adapter(ApiError.class).failOnUnknown(); try { return apiErrorJsonAdapter.fromJson(errorBody); } catch (IOException | JsonDataException exception) { return new ApiError(null, statusCode, "Unknown Error"); } } }
/** * Parses an error body and code into an {@link ApiError}. * * @param errorBody the error body from the response. * @param statusCode the status code from the response. * @param message the message from the response. * @return the parsed {@link ApiError}. */ @Nonnull public static ApiError parseError(@Nullable String errorBody, int statusCode, @Nullable String message) { if (errorBody == null) { return new ApiError(null, statusCode, message); } Moshi moshi = new Moshi.Builder().build(); JsonAdapter<CompatibilityApiError> oldApiErrorJsonAdapter = moshi.adapter(CompatibilityApiError.class).failOnUnknown(); try { return new ApiError(oldApiErrorJsonAdapter.fromJson(errorBody), statusCode); } catch (IOException | JsonDataException exception) { // Not old type of error, move on } JsonAdapter<ApiError> apiErrorJsonAdapter = moshi.adapter(ApiError.class).failOnUnknown(); try { return apiErrorJsonAdapter.fromJson(errorBody); } catch (IOException | JsonDataException exception) { return new ApiError(null, statusCode, "Unknown Error"); } } }
@Override public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { JsonAdapter<?> adapter = moshi.adapter(type, jsonAnnotations(parameterAnnotations)); if (lenient) { adapter = adapter.lenient(); } if (failOnUnknown) { adapter = adapter.failOnUnknown(); } if (serializeNulls) { adapter = adapter.serializeNulls(); } return new MoshiRequestBodyConverter<>(adapter); }
@Override public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { JsonAdapter<?> adapter = moshi.adapter(type, jsonAnnotations(annotations)); if (lenient) { adapter = adapter.lenient(); } if (failOnUnknown) { adapter = adapter.failOnUnknown(); } if (serializeNulls) { adapter = adapter.serializeNulls(); } return new MoshiResponseBodyConverter<>(adapter); }