改造 POST 请求身份验证令牌不接受
Retrofit POST Request authentication token not accepting
我正在尝试向我创建的 REST API 发送 POST 请求。为此,我正在使用 Retrofit。
现在,当我在终端中使用 CURL 命令发送请求时,请求被接受并存储了值。下面是代码:
curl -i -H "Accept: application/json" -H "Content-type: application/json" -H "X-User-Email: abcd@gmail.com" -H "X-User-Token: qQsQobQv-Wmum7bUs4b_" -X POST -d '{"store": {"code":"0010" } }' http://localhost:3000/api/store.json
以上完全没问题。
现在,当我尝试在我的 android 应用程序中使用 Retrofit 发送请求时,它在我的 API 中显示未授权错误。什么都不会存储。
final String endpoint = "http://localhost:3000/api/store.json"
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Content-Type", "application/json");
request.addHeader("Accept", "application/json");
request.addHeader("X-User-Email", email);
request.addHeader("X-User-Token", auth_token);
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(endpoint)
.setRequestInterceptor(requestInterceptor)
.build();
Service service = restAdapter.create(Service.class);
service.store(fault, new Callback<StoreResponse>() {
@Override
public void success(StoreResponse storeResponse, Response response) {
Log.d(LOG_TAG, "Success");
}
@Override
public void failure(RetrofitError error) {
Log.d(LOG_TAG, "Failure" + error.getMessage());
}
});
这行不通。我不知道该怎么办。卡在这里有一段时间了。
请帮忙!!!
这是服务 Class:
public interface Service {
@POST("/")
public void store(@Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}
编辑
现在工作正常。实际上我的电子邮件没有被存储,所以变量为空。修复了这个问题,现在一切正常。
按如下方式更改您的 "test" class:
final String endpoint = "http://localhost:3000/api"
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(endpoint)
.build();
Service service = restAdapter.create(Service.class);
service.store(fault, new Callback<StoreResponse>() {
@Override
public void success(StoreResponse storeResponse, Response response) {
Log.d(LOG_TAG, "Success");
}
@Override
public void failure(RetrofitError error) {
Log.d(LOG_TAG, "Failure" + error.getMessage());
}
});
以及您的服务接口:
public interface Service {
@Headers({"X-User-Email: abcd@gmail.com", "X-User-Token: qQsQobQv-Wmum7bUs4b_"})
@POST("/store.json")
public void store(@Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}
或者如果您需要 headers 动态值:
public interface Service {
@POST("/store.json")
public void store(@Header("X-User-Email") String email, @Header("X-User-Token") String token, @Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}
我正在尝试向我创建的 REST API 发送 POST 请求。为此,我正在使用 Retrofit。
现在,当我在终端中使用 CURL 命令发送请求时,请求被接受并存储了值。下面是代码:
curl -i -H "Accept: application/json" -H "Content-type: application/json" -H "X-User-Email: abcd@gmail.com" -H "X-User-Token: qQsQobQv-Wmum7bUs4b_" -X POST -d '{"store": {"code":"0010" } }' http://localhost:3000/api/store.json
以上完全没问题。
现在,当我尝试在我的 android 应用程序中使用 Retrofit 发送请求时,它在我的 API 中显示未授权错误。什么都不会存储。
final String endpoint = "http://localhost:3000/api/store.json"
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Content-Type", "application/json");
request.addHeader("Accept", "application/json");
request.addHeader("X-User-Email", email);
request.addHeader("X-User-Token", auth_token);
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(endpoint)
.setRequestInterceptor(requestInterceptor)
.build();
Service service = restAdapter.create(Service.class);
service.store(fault, new Callback<StoreResponse>() {
@Override
public void success(StoreResponse storeResponse, Response response) {
Log.d(LOG_TAG, "Success");
}
@Override
public void failure(RetrofitError error) {
Log.d(LOG_TAG, "Failure" + error.getMessage());
}
});
这行不通。我不知道该怎么办。卡在这里有一段时间了。 请帮忙!!!
这是服务 Class:
public interface Service {
@POST("/")
public void store(@Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}
编辑
现在工作正常。实际上我的电子邮件没有被存储,所以变量为空。修复了这个问题,现在一切正常。
按如下方式更改您的 "test" class:
final String endpoint = "http://localhost:3000/api"
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(endpoint)
.build();
Service service = restAdapter.create(Service.class);
service.store(fault, new Callback<StoreResponse>() {
@Override
public void success(StoreResponse storeResponse, Response response) {
Log.d(LOG_TAG, "Success");
}
@Override
public void failure(RetrofitError error) {
Log.d(LOG_TAG, "Failure" + error.getMessage());
}
});
以及您的服务接口:
public interface Service {
@Headers({"X-User-Email: abcd@gmail.com", "X-User-Token: qQsQobQv-Wmum7bUs4b_"})
@POST("/store.json")
public void store(@Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}
或者如果您需要 headers 动态值:
public interface Service {
@POST("/store.json")
public void store(@Header("X-User-Email") String email, @Header("X-User-Token") String token, @Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}