【问题标题】:How to post JSON but get XML response using Retrofit?如何发布 JSON 但使用 Retrofit 获得 XML 响应?
【发布时间】:2015-02-10 17:29:24
【问题描述】:

我有一个特定的 web 服务,它需要一个 JSON 作为 post,并且会返回一个 XML。我正在为我的所有网络调用使用 Retrofit。以下是我使用 XML 转换器设置改造适配器的方法:

mRestAdapter = new RestAdapter.Builder()
                    .setEndpoint(getBaseUrl())
                    .setConverter(new SimpleXMLConverter())
                    .build();

如您所见,我没有使用 Gson 转换器。我怎样才能设法发布任何 JSON?谢谢!

【问题讨论】:

  • retrofit2 现在支持设置多个转换器。您现在可以使用 .addConverterFactory(GsonConverterFactory.create()).addConverterFactory(SimpleXMLConverterFactory.create())
  • Re: Fabian - 如果所有方法的响应格式(xml 或 json)都不同,如何在服务接口中设置响应格式(xml 或 json)?

标签: android xml json retrofit


【解决方案1】:

创建自定义Converter。这将使用不同的转换器进行序列化和反序列化。

public class MixedConverter implements Converter {
      private Converter mSerializer;
      private Converter mDeserializer;

    public MixedConverter(Converter serializer, Converter deserializer) {
        mSerializer = serializer;
        mDeserializer = deserializer;
    }


    @Override
    public Object fromBody(TypedInput body, Type type) throws ConversionException {
        return mDeserializer.fromBody(body, type);
    }

    @Override
    public TypedOutput toBody(Object object) {
        return mSerializer.toBody(object);
    }
}

用法:

.setConverter(new MixedConverter(new SimpleXMLConverter(), new GsonConverter(gson)));

【讨论】:

  • 由于要发布JSON,所以需要颠倒顺序:.setConverter(new MixedConverter(new GsonConverter(gson), new SimpleXMLConverter()))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 2018-01-15
  • 2018-07-31
  • 1970-01-01
  • 2012-09-22
  • 2019-03-13
  • 2015-05-22
相关资源
最近更新 更多