改造 - POST 带@Path 且不带参数的请求
Retrofit - POST request with @Path and without parameters
对API的请求如下:
POST /verify/phone/{userid}/
Mandatory parameters: userid (integer)
Return: nothing
如果我想验证 ID 为 1 的用户(例如),我总是收到 Bad Request
错误:
Response{protocol=http/1.1, code=400, message=Bad Request, url=http://dummyapi.com/verify/phone/1/}
使用 Postman 发布相同的请求效果很好。
代码:
@POST("/verify/phone/{userid}/")
Call<String> postVerifyPhone(@Path("userid") int userId);
public void postVerifyPhone(int userID){
showProgressBar();
RestClient.GitApiInterface service = RestClient.getClient();
Call<String> call = service.postVerifyPhone(userID);
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Response<String> response) {
hideProgressBar();
if (response.isSuccess()) {
String result = response.body();
} else {
Log.d("Fail: ", response.body()); //everytime here with Bad Request
}
}
@Override
public void onFailure(Throwable t) {
hideProgressBar();
}
});
}
我使用 String 作为 return 类型,因为当数据库中没有具有请求 ID 的用户时会出现 returned 消息。
可能是什么原因?
我正在调用下面的代码来读取响应数据。
public void postVerifyPhone(int userID){
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(Constants.URL).build();
RetrofitApi retrofitApi = restAdapter.create(RetrofitApi.class);
retrofitApi.postVerifyPhone(userID, new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(response.getBody().in()));
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
String result = sb.toString();
// System.out.println("res:" + result.toString());
}
@Override
public void failure(RetrofitError error) {
hidePDialog();
}
});
}
下面是 postVerifyPhone() 代码
@FormUrlEncoded
@POST("/verify/phone/")
public void postVerifyPhone(@Field("userID") String userID, Callback<Response> resonse);
它工作正常 me.please 检查一次。
我认为正确的注释是@PathParam,而不是@Path
对API的请求如下:
POST /verify/phone/{userid}/
Mandatory parameters: userid (integer)
Return: nothing
如果我想验证 ID 为 1 的用户(例如),我总是收到 Bad Request
错误:
Response{protocol=http/1.1, code=400, message=Bad Request, url=http://dummyapi.com/verify/phone/1/}
使用 Postman 发布相同的请求效果很好。
代码:
@POST("/verify/phone/{userid}/")
Call<String> postVerifyPhone(@Path("userid") int userId);
public void postVerifyPhone(int userID){
showProgressBar();
RestClient.GitApiInterface service = RestClient.getClient();
Call<String> call = service.postVerifyPhone(userID);
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Response<String> response) {
hideProgressBar();
if (response.isSuccess()) {
String result = response.body();
} else {
Log.d("Fail: ", response.body()); //everytime here with Bad Request
}
}
@Override
public void onFailure(Throwable t) {
hideProgressBar();
}
});
}
我使用 String 作为 return 类型,因为当数据库中没有具有请求 ID 的用户时会出现 returned 消息。
可能是什么原因?
我正在调用下面的代码来读取响应数据。
public void postVerifyPhone(int userID){
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(Constants.URL).build();
RetrofitApi retrofitApi = restAdapter.create(RetrofitApi.class);
retrofitApi.postVerifyPhone(userID, new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(response.getBody().in()));
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
String result = sb.toString();
// System.out.println("res:" + result.toString());
}
@Override
public void failure(RetrofitError error) {
hidePDialog();
}
});
}
下面是 postVerifyPhone() 代码
@FormUrlEncoded
@POST("/verify/phone/")
public void postVerifyPhone(@Field("userID") String userID, Callback<Response> resonse);
它工作正常 me.please 检查一次。
我认为正确的注释是@PathParam,而不是@Path