項目開發(fā)的時候,有同事遇到了一個Gson解析的異常,原因是Base64字符串中有空格造成的
1、修改前
/**
* 獲取Retrofit設置
* @param ctx 上下文
* @param serverUrl 請求地址
* @param certificateIn 證書文件流
* @param certificatePwd 證書密碼
* @return retrofit
*/
protected Retrofit getRetrofit(Context ctx, String serverUrl, InputStream certificateIn, String certificatePwd) {
Retrofit.Builder builder = new Retrofit.Builder();
builder.baseUrl(serverUrl);
builder.client(genericClient(ctx, serverUrl, certificateIn, certificatePwd));
builder.validateEagerly(true);
builder.addConverterFactory(GsonConverterFactory.create(gson));
builder.addCallAdapterFactory(RxJavaCallAdapterFactory.create());
return builder.build();
}
2、修改后
/**
* 獲取Retrofit設置
* @param ctx 上下文
* @param serverUrl 請求地址
* @param certificateIn 證書文件流
* @param certificatePwd 證書密碼
* @return retrofit
*/
protected Retrofit getRetrofit(Context ctx, String serverUrl, InputStream certificateIn, String certificatePwd) {
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit.Builder builder = new Retrofit.Builder();
builder.baseUrl(serverUrl);
builder.client(genericClient(ctx, serverUrl, certificateIn, certificatePwd));
builder.validateEagerly(true);
builder.addConverterFactory(GsonConverterFactory.create(gson));
builder.addCallAdapterFactory(RxJavaCallAdapterFactory.create());
return builder.build();
}
3、修改關鍵處
Gson gson = new GsonBuilder()
.setLenient()
.create();