实现用于改造自定义标题和我没有得到任何发现改造注解,错误
问题描述:
这下面的代码是调用webservice的,我想实现与Retrofit
在Android,但我得到这个错误:实现用于改造自定义标题和我没有得到任何发现改造注解,错误
No Retrofit annotation found
调用Web Service
与CURL
:
curl -H "X-Auth-Token: 9HqLlyZOugoStsXCUfD_0YdwnNnunAJF8V47U3QHXSq" \
-H "X-User-Id: aobEdbYhXfu5hkeqG" \
http://localhost:3000/api/v1/channels.list
我写这个接口像上面的代码:
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Header;
public interface RocketRestfulService {
@GET("/api/v1/channels.list")
Call<List<ChannelsList>> getChannelsList(
@Header("X-Auth-Token") String AuthToken,
@Header("X-User-Id") String UserId,
ChannelsList channelsList);
}
,我这段代码调用此休息Web Service
:
ChannelsList channelsList = new ChannelsList();
Call<List<ChannelsList>> call = rocketRestfulService.getChannelsList(
"HNv1VtMiyUky2RkXWUydyj4f2bfciQ6DzVQgKULSwfe",
"Wz9ex2N2z9zzJWdzD",
channelsList);
call.enqueue(new Callback<List<ChannelsList>>() {
@Override
public void onResponse(Call<List<ChannelsList>> call, final Response<List<ChannelsList>> response) {
Log.e("contentLength ", response.code() + "");
}
@Override
public void onFailure(Call<List<ChannelsList>> call, Throwable t) {
t.printStackTrace();
}
});
什么我的代码,我不能打电话,我得到错误的问题?
答
您忘记了@Body
注释。由于您必须发送正文,因此您必须为您的API创建一个POST
。如果不是POST
,则必须找到如何发送ChannelsList
以成为GET
请求,因为这取决于您的服务器实现。
@POST("/api/v1/channels.list")
Call<List<ChannelsList>> getChannelsList(
@Header("X-Auth-Token") String AuthToken,
@Header("X-User-Id") String UserId,
@Body ChannelsList channelsList);
答
问题通过此以下代码解决:
接口:
public interface RocketRestfulService {
@GET("/api/v1/channels.list")
Call<ResponseBody> getChannelsList(
@Header("X-Auth-Token") String AuthToken,
@Header("X-User-Id") String UserId);
}
呼叫请求,并获得响应:
ChannelsList channelsList = new ChannelsList();
Call<ResponseBody> call = rocketRestfulService.getChannelsList(
"HNv1VtMiyUky2RkXWUydyj4f2bfciQ6DzVQgKULSwfe",
"Wz9ex2N2z9zzJWdzD");
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {
if (response.isSuccessful()) {
try {
String jsonString = response.body().string();
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray jsonarray = jsonObject.getJSONArray("channels");
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e("Err: ", t.getMessage());
}
});
我得到这个错误'非身体HTTP方法不能包含@身体现在 –
@ Mahdi.Pishguy我更新了我的答案。 –
我试图在Android上实现这个链接,为这个Web服务改进'https:// rocket.chat/docs/developer-guides/rest-api/channels/list'和'HTTP Method'是'GET'我在Web浏览器上,有些其他客户端没有任何问题 –