Java 是否将改装路径参数值映射到返回的对象?
我了解在定义API接口时如何使用Reformation的路径参数。例如:Java 是否将改装路径参数值映射到返回的对象?,java,android,gson,retrofit,Java,Android,Gson,Retrofit,我了解在定义API接口时如何使用Reformation的路径参数。例如: @GET("/users/{id}/profile") void getUserProfile(@Path("id") int userId, Callback<UserProfile> callback); @GET(“/users/{id}/profile”) void getUserProfile(@Path(“id”)int userId,回调); 我了解如何设置一个基本类,允许GSON自动将API
@GET("/users/{id}/profile")
void getUserProfile(@Path("id") int userId, Callback<UserProfile> callback);
@GET(“/users/{id}/profile”)
void getUserProfile(@Path(“id”)int userId,回调);
我了解如何设置一个基本类,允许GSON自动将API响应映射到我想要的类
我的问题是,改造是否支持类成员上的某种注释,当它执行GSON魔术时,这些注释将自动填充成员的路径值?在本例中,用户ID作为路径参数出现在URL路径中,但不在响应中,我希望将其分配给返回的对象。我唯一的想法是解决问题,而不是回答:使用两个回调。一个在接口方法中定义并由调用者提供,另一个在某个帮助器类中调用RestAdapter生成的服务的本地回调。本地回调接收实际响应,分配缺少的值,并将完成的对象提供给调用方提供的回调?例如,类似这样的东西……但它似乎有点骇人听闻:
public void getUserProfile(final int userId, final Callback<UserProfile> callback)
{
Callback<UserProfile> cb = new Callback<UserProfile>()
{
@Override
public void success(UserProfile userProfile, Response response)
{
userProfile.userId = userId;
callback.success(userProfile, response);
}
@Override
public void failure(RetrofitError error)
{
callback.failure(error);
}
};
myService.getUserProfile(userId, cb);
}
public void getUserProfile(最终int用户标识,最终回调)
{
回调cb=新回调()
{
@凌驾
public void成功(UserProfile UserProfile,Response-Response)
{
userProfile.userId=userId;
callback.success(userProfile,response);
}
@凌驾
公共无效失败(错误)
{
回调失败(错误);
}
};
getUserProfile(userId,cb);
}
创建回调时,我会将请求信息粘贴到回调中。然后,当改型调用success或failure方法时,可以在success或failure方法中使用该信息
我使用Square的Otto事件总线进行改造,所以我的过程是这样的
@Subscribe
public void onSignup(SignupRequest event) {
MyLog.p(this,"inside api repo - making signup request");
mRailsApi.signup(event, new RailsApiCallback<SignupRequest,SignupResponse>(mBus, event, new SignupResponse()));
}
@POST(API_URL + "/signup")
void signup(@Body UserRequestParams requestParams,
Callback<SignupResponse> tokenParms);
public class RailsApiCallback<T,S extends BaseResponse> implements Callback<S> {
private Bus mBus;
private S mResponse;
private T mRequestEvent;
@Inject PersistData mPersistData;
@Inject @ForApplication Context mContext;
@Inject MyApp mMyApp;
public RailsApiCallback(Bus bus, T requestEvent, S response) {
super();
mBus = bus;
mResponse = response;
mRequestEvent = requestEvent;
mResponse.setRequestEvent(requestEvent);
Injector.getInstance().inject(this);
}
@Override
public void success(S convertedResponse, Response rawResponse) {
MyLog.p(this,String.format("response body = %s",rawResponse.getBody()));
S response = convertedResponse != null ? convertedResponse : mResponse ;
response.setSuccessful(true);
response.setRawResponse(rawResponse);
response.setRequestEvent(mRequestEvent);
mBus.post(response);
}
@订阅
注册时公共无效(注册请求事件){
p(这是“api内部回购-签署申请”);
mRailsApi.signup(event,new RailsApiCallback(mBus,event,new SignupResponse());
}
@帖子(API_URL+“/注册”)
无效注册(@Body UserRequestParams requestParams,
回调函数(PARMS);
公共类RailsApiCallback实现回调{
私家巴士小巴;
私人秘书处的答复;
私人捷运服务;
@注入持久数据mPersistData;
@注入@ForApplication上下文mContext;
@注射MyApp-mMyApp;
公共RailsApiCallback(总线、T请求事件、S响应){
超级();
mBus=公共汽车;
mResponse=响应;
mRequestEvent=requestEvent;
mResponse.setRequestEvent(requestEvent);
Injector.getInstance().Injector(这个);
}
@凌驾
public void成功(S个convertedResponse、Response和Response){
p(这是String.format(“响应体=%s”,rawResponse.getBody());
S response=convertedResponse!=null?convertedResponse:mrresponse;
response.setSuccessful(true);
response.setRawResponse(rawResponse);
response.setRequestEvent(mrrequestevent);
小型企业单位员额(答复);
}