Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Retrofit y caracteres Slash en PATH

Estoy enfrentando un problema con Retrofit y me gustaría encontrar una respuesta adecuada, ya que la única manera en la que puedo pensar es bastante fea y no práctica.

Retrofit PATH anotación requiere un "/" en el principio (como se puede leer en este código extraído de la biblioteca de origen:

/** Loads {@link #requestUrl}, {@link #requestUrlParamNames}, and {@link #requestQuery}. */ private void parsePath(String path) { if (path == null || path.length() == 0 || path.charAt(0) != '/') { throw methodError("URL path \"%s\" must start with '/'.", path); } 

El problema que enfrento es que la parte PATH viene del backend en un objeto de respuesta, lo que significa que todas las cadenas de PATH ya vienen formateadas desde el backend anteriormente en otra respuesta de la siguiente manera:

 Object : { href: "/resources/login..." } 

Como se puede ver, al incluir algo como esto, la URL se malforma:

 @GET("{/loginHref}") void login(@EncodedPath("loginHref") String loginHref, Callback<User> callback); 

A algo como " http://mybaseurl.com//resources/login " * doble // frente a los recursos

Esto definitivamente puede causar problemas en algunos puntos finales y no puedo pensar en una manera realmente simple de resolver este problema aparte de hacer algo como:

A) Modificar mi propia versión de retrofit para eliminar ese / cheque de carácter (esto es un último recurso)

B) Truncar el href antes de usar el método de la interfaz (que me gustaría evitar a toda costa, así como añadir transformación innecesaria en todo el lugar.

C) Interceptar la solicitud y formar correctamente la URL en caso de que este escenario suceda (muy fea solución también).

Alguna idea, sugerencias?

¡Gracias!

  • Equivalente de iOS NSNotificationCenter en Android?
  • Ellipsize no funciona para textView dentro de listView personalizado
  • Instalar muestra error en la consola: INSTALAR FALLA CONFLICTING PROVIDER
  • Mostrar la intención de la cámara sólo en Webview en android - no puede obtener sólo Camera Intent - android 5+ y 6+
  • Funciones de JavaScript de Android Calling en WebView
  • Maven y Android Facebook SDK apklib
  • Barra de búsqueda de mapas en Google Maps v2
  • Problema de actualización de Android ICS ListView
  • One Solution collect form web for “Retrofit y caracteres Slash en PATH”

    Creo que este enlace le ayudará a reemplazar el camino

    Su nueva implementación se verá así.

     @GET("/") void login(Callback<User> callback); 

    Puede proporcionar una implementación de Endpoint personalizada en la que puede cambiar la ruta relativa.

     public final class CustomEndpoint implements Endpoint { private static final String BASE = "http://192.168.1.64:5050/api/"; private String url; private String href; public CustomEndpoint(String href){ this.href = href; url = BASE + this.href; } @Override public String getName() { return "default"; } @Override public String getUrl() { if (url == null) throw new IllegalStateException("relative path not set."); return url; } } 

    El uso es como sigue

     RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(new CustomEndPoint(object.href)); then restadapter.create........ 

    Espero que esto te ayudará.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.