我正在使用Retrofit2从Android客户端做请求。我的请求类型是PUT,请求模型是:
public class BusinessStatus {
public enum STATUS
{
AVAILABLE, UNAVAILABLE
}
public STATUS status ;
public BusinessStatus(STATUS status) {
this.status = status;
}
}
我的改造api接口服务是:
public interface BusinessStatusApi {
@PUT("abul/{driverId}/abulass")
Observable<Response<Void>> updateBusinessStatus(@Path("driverId") String driverId, @Body BusinessStatus businessStatus);
}
我正在向Presenter发出PUT请求:
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");
}
);
}
但是不常见的不必要的serialVersionUID被添加到Request Body 并从Backend API获得400。
这是我的okhttp日志:
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}
为什么在那里添加了不必要的serialVersionUID,尽管它没有包含在请求模型中?
答案 0 :(得分:1)
串行版本( serialVersionUID )是唯一标识符,用于确定类型的不同版本是否兼容。
因此,例如,您正在发送枚举,并且内部Retrofit必须序列化该值以通过网络发送它。
如果响应属于同一类型,那么您可能会期望Retrofit将反序列化反序列化并为您提供相同的枚举类型。
在序列化过程中,Java执行计算并生成名为 serialVersionUID 的值。签名就像,
private static final long serialVersionUID = -1766960164825680704L;
通过为 serialVersionUID 设置自定义值进行改造,负责确保兼容性。