【问题标题】:How provide Custom Converter for Retrofit 2如何为 Retrofit 2 提供自定义转换器
【发布时间】:2017-06-29 09:43:23
【问题描述】:

我知道有人问过类似的question 并得到了回答,但我的情况有点不同。

我有一个 加密 响应,解密时会生成 XML 响应(已实施解密)。所以我不能使用SimpleXmlConverterFactory。由于使用Retrofit,我无法访问响应正文,因此无法解密它。但是,如果我能以某种方式访问​​响应主体(可能在转换器工厂中或通过其他方式)并将其更改为解密后的 XML,我可以继续使用 Retrofit。

所以我做了我的研究;虽然我不太了解Converter.Factory,但我认为可能有一种方法可以通过覆盖这个或SimpleXmlConverterFactory 来实现我的目标。但是没有源代码我做不到。

所以这是我的问题:我可以使用 Retrofit 以任何方式访问和解密响应 String 吗?

如果我能做到这一点,那么我可以继续使用 Retrofit,否则我将不得不切换到 HttpURLConnection。我不想这样做,因为这个加密响应是针对单个呼叫响应的。

【问题讨论】:

    标签: java android retrofit2


    【解决方案1】:

    您可以使用SimpleXmlConverter 的源代码编写自定义转换器。 您应该在RequestBodyConverterResponseBodyConverterconvert 方法中添加解密/加密

    【讨论】:

    • 是的,我已经了解了那部分,问题是我不明白 serializer 是如何工作的。序列化程序将读取器作为来自ResponseBody 的输入参数。我不能简单地传递一个字符串。我考虑过创建一个临时文件并为此提供流,但还没有实现。
    • @Abbas 从ResponseBody 获取字节流或字符流,解密。您可以发送到序列化器 String 或 InputStream,请参阅simple.sourceforge.net/download/stream/doc/javadoc/org/…
    • 您不明白我已经解密了响应但是我无法更改源中的值(在这种情况下可能是缓存)。但我确实在org.simpleframework.xml.Serializer 中找到了一个方法,其中采用了String 的源。所以我准备好了。不过感谢您的回复。
    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多