RETROFIT2自定义转换器到加密请求,@字段使用,但转换字符串Converter不起作用



我很困惑,当我使用retrofit2(raturofit版本2.1.0 @时,加密我的请求,api像this

 public interface API {
       @FormUrlEncoded
       @POST("login.do?os=" + ConstantValue.OS + "&version=" + ConstantValue.VERSION)
       Observable<LoginInfo> login(@Field("cmd") String params);
  } 

我的Coustom Converter主代码

  @Override
  public Converter<ResponseBody, ?> responseBodyConverter(Type type,    Annotation[] annotations,
  Retrofit retrofit) {
     TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
     return new DecryptResponseBodyConverter<>(gson, adapter);
  }
  @Override
  public Converter<?, RequestBody> requestBodyConverter(Type type,
   Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
     TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
     return new EncryptRequestBodyConverter<>(gson, adapter);
  }
  @Override
  public Converter<?, String> stringConverter(Type type, Annotation[]     annotations, Retrofit retrofit) {
     TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
     return new EncryptRequestStringConverter<>(gson,adapter);
  }

我的自定义转换器的方法字符串换频器不起作用。retrofit2.buildinconvert $ stringConverter首次执行我的..

帮助〜帮助〜

我找到了默认的buildInconverter,其字符串converter将拦截ptect的请求。

    @Override public Converter<?, String> stringConverter(Type type, Annotation[] annotations,Retrofit retrofit) {
        if (type == String.class) {
            return StringConverter.INSTANCE;
        }
        return null;
    }

所以我更改了参数的类型,例如

public interface API {
   @FormUrlEncoded
   @POST("login.do?os=" + ConstantValue.OS + "&version=" + ConstantValue.VERSION)
   Observable<LoginInfo> login(@Field("cmd") JsonObject params);

}

然后它起作用。

最新更新