2017-09-15 6 views
0

Je fais une demande d'Android Client avec Retrofit2. Mon type de demande est PUT et demande modèle est:SerialVersionUID inutile dans Retrofit 2 Request Body

public class BusinessStatus { 

    public enum STATUS 
    { 
    AVAILABLE, UNAVAILABLE 
    } 

    public STATUS status ; 

    public BusinessStatus(STATUS status) { 
    this.status = status; 
    } 

} 

Mon retrofit service d'interface api est:

public interface BusinessStatusApi { 

    @PUT("abul/{driverId}/abulass") 
    Observable<Response<Void>> updateBusinessStatus(@Path("driverId") String driverId, @Body BusinessStatus businessStatus); 

} 

Je fais la demande PUT Présentateur comme ceci:

public void updateAbulAssStatus(final String driverId, STATUS status) { 
    BusinessStatus businessStatus = new BusinessStatus(status); 
    Observable<Response<Void>> call = mBusinessStatusApi 
     .updateBusinessStatus(driverId, businessStatus); 

    Subscription subscription = call 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(
      response -> { 
       if (response.isSuccessful()) { 

       } else { 
       Toast.makeText(mContext.getApplicationContext(), "Something went wrong", 
        Toast.LENGTH_SHORT).show(); 
       } 
      }, 
      e -> { 
       if (e instanceof HttpException) { 
       ResponseBody responseBody = ((HttpException) e).response().errorBody(); 
       Timber.d("ErrorMessage", responseBody); 
       } 
      }, 
      () -> { 
       Timber.d("Status", "Completed"); 
      } 
     ); 

    } 

Mais un serialVersionUID inutile inhabituel est ajouté au corps de requête et 400 à partir de Backend API.

Voici mon okhttp journal:

PUT http://localgost:8080/v1/abul/10011/abulass http/1.1 
09-15 14:55:01.394 12402-12578 D/OkHttp: Content-Type: application/json; charset=UTF-8 
09-15 14:55:01.397 12402-12578/ D/OkHttp: Content-Length: 62 
09-15 14:55:01.398 12402-12578/ D/OkHttp: {"status":"AVAILABLE","serialVersionUID":-1766960164825680704} 

pourquoi il est inutile serialVersionUID étant ajouté il malgré qu'il ne soit pas inclus dans le modèle de demande?

Répondre

1

La version série (serialVersionUID) est un identificateur unique utilisé pour déterminer si différentes versions d'un type sont compatibles. Ainsi, par exemple, vous envoyez une énumération et, en interne, Retrofit doit sérialiser la valeur pour l'envoyer via le réseau.

Si la réponse est du même type, vous vous attendez à ce que Retrofit désérialise la réponse et vous donne le même type enum.

Lors du processus de sérialisation, Java exécute un calcul et génère une valeur nommée serialVersionUID. La signature est comme,

private static final long serialVersionUID = -1766960164825680704L; 

Rénovation, en fixant une valeur personnalisée pour serialVersionUID, prend la responsabilité d'assurer la compatibilité.