当前位置: 首页 > 知识库问答 >
问题:

在改造中增加表头参数

陶泳
2023-03-14

我正在尝试调用一个API,它要求我传入一个API密钥。

我使用HttpURLConnection的服务调用工作正常。

url = new URL("https://developers.zomato.com/api/v2.1/search?entity_id=3&entity_type=city&q=" + params[0]);
        urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection.setRequestProperty("user-key","9900a9720d31dfd5fdb4352700c");

        if (urlConnection.getResponseCode() != 200) {
            Toast.makeText(con, "url connection response not 200 | " + urlConnection.getResponseCode(), Toast.LENGTH_SHORT).show();
            Log.d("jamian", "url connection response not 200 | " + urlConnection.getResponseCode());
            throw new RuntimeException("Failed : HTTP error code : " + urlConnection.getResponseCode());
        }

然而,我不确定这是如何工作与改造,因为我的调用进入失败的所有时间。这是我在同一个服务调用中使用的代码

 @GET("search")
Call<String> getRestaurantsBySearch(@Query("entity_id") String entity_id, @Query("entity_type") String entity_type, @Query("q") String query,@Header("Accept") String accept, @Header("user-key") String userkey);

我用这个来称呼它

Call<String> call = endpoint.getRestaurantsBySearch("3","city","mumbai","application/json","9900a9720d31dfd5fdb4352700c");

所有这些调用都将进入改型中的OnFailure方法。如果不使用HeaderParameters发送它,它将以403获得成功,因为我显然需要在某个地方传递api键,但我不知道如何传递。

@GET("search")
Call<String> getRestaurantsBySearch(@Query("entity_id") String entity_id, @Query("entity_type") String entity_type, @Query("q") String query);

我在失败中遇到的错误是

java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $

共有1个答案

严永丰
2023-03-14

尝试使用此类型标头进行改装1.9和2.0。对于Json内容类型。

@Headers({"Accept: application/json"})
@POST("user/classes")
Call<playlist> addToPlaylist(@Body PlaylistParm parm);

您可以添加更多的头,例如

@Headers({
        "Accept: application/json",
        "User-Agent: Your-App-Name",
        "Cache-Control: max-age=640000"
    })

动态添加到标头:

@POST("user/classes")
Call<ResponseModel> addToPlaylist(@Header("Content-Type") String content_type, @Body RequestModel req);

调用您的方法即

mAPI.addToPlayList("application/json", playListParam);

每次都想通过然后用http拦截器创建HttpClient对象:

OkHttpClient httpClient = new OkHttpClient();
        httpClient.networkInterceptors().add(new Interceptor() {
            @Override
            public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
                Request.Builder requestBuilder = chain.request().newBuilder();
                requestBuilder.header("Content-Type", "application/json");
                return chain.proceed(requestBuilder.build());
            }
        });

然后添加到改装对象

Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL).client(httpClient).build();

更新如果您正在使用Kotlin删除{}否则将不起作用

 类似资料:
  • 问题内容: 我有一份詹金斯的工作。我想使用build参数在特定时间构建我的工作。 我想通过使用该选项。 我有这样的输入: 如果我这样做,詹金斯会显示一个错误。 是否可以 不使用任何插件 。 如果没有,那哪个插件会更好 或者,有没有办法在时间表中提供参数? 我的实际需求是这样的: 问题答案: 基本上,使用“定期构建”选项,您无法安排带有参数的Jenkins作业。 但是,要在需要使用不同环境的不同时间

  • 问题内容: 我正在实现登录功能,并为此使用Post请求,但是我收到错误提示 “ retrofit.RetrofitError:com.squareup.okhttp.internal.http.HttpMethod.METHODS” 下面是我的代码 在它下面的logcat输出。 02-10 13:02:43.846:W / System.err(30684):retrofit.RetrofitEr

  • 我们的团队决定采用改型2.0,我正在做一些初步的研究。我是这个图书馆的新手。 我想知道如何使用在我们的Android应用程序中通过改装2.0添加自定义标题。有很多教程介绍如何使用在翻新版1.X中添加标头,但由于API在最新版本中发生了很大变化,我不知道如何在新版本中适应这些方法。此外,改装尚未更新其新文档。 例如,在以下代码中,我应该如何实现类来添加额外的头?此外,未记录的对象究竟是什么?何时调用

  • 参与者可以使用API或命令行添加到参与者库中。 在你开始之前 在你执行这些步骤之前,你在业务网络定义中必须建模一个参与者,并将其部署为业务网络。 下面的过程显示了一个使用以下数字财产范例业务网络定义的参与者模型的示例:digitalproperty-network 请注意:如果你使用composer participant add命令添加参与者,请确保参与者的JSON陈述包裹在单引号中。 name

  • 我使用的API使用授权方案,该方案需要设置特殊的“X-Authoration”标头来验证请求。例如,此Retrofit设置非常适合身份验证令牌为的用户: 我缓存了用户的X-Authorization令牌,所以我可以访问它,但是,我不能在@Headers声明中删除它。 我在这里得到一个编译错误: 有什么办法可以绕过这个吗?