2017-09-15 5 views
0

Retrofit2가 설치된 Android 클라이언트로부터 요청을하고 있습니다. 내 요청 유형은 PUT 요청의 모델입니다 :Retrofit 2 요청 본문에 불필요한 serialVersionUID

public class BusinessStatus { 

    public enum STATUS 
    { 
    AVAILABLE, UNAVAILABLE 
    } 

    public STATUS status ; 

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

} 

내 개조 API 인터페이스 서비스는 다음과 같습니다

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"); 
      } 
     ); 

    } 

그러나 :

public interface BusinessStatusApi { 

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

} 

내가 같이 발표자에서 PUT 요청을하고 비정상적인 불필요한 serialVersionUID가 요청 본문에 추가되고 백엔드 API에서 400을 얻습니다. 여기

내 okhttp 로그입니다 :

이 요청 모델에 포함되지 않습니다에도 불구하고 불필요한의 serialVersionUID가 거기에 추가되는 이유
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} 

?

답변

1

일련 번호 (serialVersionUID)는 고유 한 식별자로 서로 다른 버전의 형식이 호환되는지 확인하는 데 사용됩니다.

예를 들어, 열거 형을 보내고 있으며 내부적으로 Retrofit이 값을 직렬화하여 네트워크를 통해 보내야합니다.

응답 유형이 동일한 경우 Retrofit에서 응답을 deserialize하고 동일한 열거 형을 제공 할 것으로 예상됩니다.

직렬화 프로세스에서 Java는 계산을 수행하고 serialVersionUID이라는 값을 생성합니다. 서명이을 serialVersionUID의 에 대한 사용자 지정 값을 설정하여, 같은

private static final long serialVersionUID = -1766960164825680704L; 

개조하고, 호환성을 보장하기 위해 책임을하고있다.