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

Android改进了2个带有动态标题的原始json帖子

南门洋
2023-03-14

我试图在Android请求中使用带有动态标题的Reformation 2发布原始JSON,其中包含下面的几个标题和我尝试过的代码,但我无法理解哪里出了问题。

标题

Accept:text/csv
x-api-key:{{api_key}}
x-session-key:{{session_token}}
x-location:-10,10
x-version:1.0
x-client-id:15
Content-Type:application/json

我想发布的原始JSON

 {
    "commands":[
        {
                "command":"check_in",
                "sale_content_id": 1,
                "event_id": 3,
                "value": true
        }
    ]
}

下面是我的代码

@Headers({"Accept: text/csv", "Content-Type: application/json"})
@POST(CHECKIN_DATA_SCANNER)
Call<CheckIn> sendCheckinDataRequest(@Body JSONObject locationPost);

我如何在活动课上打改装电话

private void sendCheckinDataRequest() {

        String mSessionToken = mContext.getSessionToken();
        String mAPIkey = "staging_api_key";
        String mClientId = "15";

        RestInterface service = CheckInServiceGenerator.createService(RestInterface.class, mSessionToken, mAPIkey, mClientId);
        Call<CheckIn> call = service.sendCheckinDataRequest(mRawJson);
        call.enqueue(new Callback<CheckIn>() {
            @Override
            public void onResponse(Call<CheckIn> call, Response<CheckIn> response) {

                Log.e(TAG, "POST RESPONSE : " + new Gson().toJson(response));

            }

            @Override
            public void onFailure(Call<CheckIn> call, Throwable t) {
                // something went completely south (like no internet connection)

                Log.d("Error", t.getMessage());
            }
        });

    }

我收到400个错误请求。我错过什么了吗?

共有1个答案

龙毅
2023-03-14

有几个方法可以解决这个问题让我给你看一些

1.使用HeaderMap改造实际上有一种方法可以发送任意数量的头。这可以用@HeaderMap来实现。

@Headers({"Accept: text/csv", "Content-Type: application/json"})
@POST(CHECKIN_DATA_SCANNER)
Call<CheckIn> sendCheckinDataRequest(
         @Body JSONObject locationPost, 
         @HeaderMap Map<String, String> headers);

这可以被称为:

 Map<String, String> headers = HashMap<>();
 // Populate map with headers
 service.sendCheckinDataRequest(mRawJson, headers);

2.使用单个参数如果只有两个动态标题,则可以简单地使用普通参数:

@Headers({"Accept: text/csv", "Content-Type: application/json"})
@POST(CHECKIN_DATA_SCANNER)
Call<CheckIn> sendCheckinDataRequest(
         @Body JSONObject locationPost, 
         @Header("x-api-key") String apiKey,
         @Header("x-session-key") String sessionKey);

可以这样称呼:

 service.sendCheckinDataRequest(mRawJson, apiKey, sessionKey);

3.使用拦截器如果您希望所有请求都使用这些头,那么最简单的方法可能是使用拦截器:

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();  
httpClient.addInterceptor(new Interceptor() {  
  @Override
  public Response intercept(Interceptor.Chain chain) throws IOException {
    Request original = chain.request();

    Request request = original.newBuilder()
        .header("x-api-key", <apiKey>)
        .header("x-session-key", <sessionKey>)
        .method(original.method(), original.body())
        .build();

    return chain.proceed(request);
  }
}

将此okhttp客户端用于改装,每个请求都会添加标题。

 类似资料:
  • 我想发一个带有改装2的帖子。url有一些参数: url如下所示 www.website.com/server/directory/location。type?arg1=value1&arg2=value2 我被要求使用POST请求。值(value1和value2)在运行时是动态的。我使用HttpClient用Xamarin开始了这个项目,现在我正在用Java原生语言重写它。在C#中,我所要做的就是

  • 我是Retrofit 2的新手,正在尝试在我的应用程序中集成Google Place API。我的问题是如何在使用Retrofit 2.0的同时使用这种动态URL。 URL: 我的模型类名称为: 1)位置自动完成 位置预测 以及 我已经创建了WebServiceCall。java类进行改造,这是我的代码 我在调用URL时使用了这个接口:但我无法继续。 } 我一直在谷歌和StackOverflow中

  • 有没有办法使用ACF to REST-API插件返回自定义帖子类型的帖子标题?当我在帖子类型上运行查询时,我得到的只是帖子ID,然后是我在其中设置的任何字段,但如果我可以像我只是使用ACF而不通过REST-API调用时一样抓取它,我希望不必在ACF中创建另一个名为“标题”的字段。 这是我对名为“book”的自定义帖子类型的GET请求: 该帖子类型包含作者姓名字段和用于将书籍段落与书籍相关联的关系字

  • 有一个请求队列,回复队列由客户端服务器实例创建,并固定到每个实例,而不是使用临时队列。 用例需要获取入站jms消息,然后将该消息发送到异步进程。一旦从服务接收到异步回复消息,我需要获取这些结果并回复原始消息的jmsReplyTo。Jms网关在这种情况下不起作用AFAIK 我正在使用jms消息驱动的通道适配器来处理带有一系列通道和服务激活器的消息,以处理进程外调用和异步回复。我正在尝试使用Dynam

  • 我试图使用Android Volley库发送JSON Post请求,但我似乎没有得到json的正文,我在我的Web服务器上得到未定义的正文参数。我需要json的参数体是一个单一的对象"name=某些Val } 我也在上面的代码中尝试了这一点,但没有成功:

  • 我的Rest控制器 我的异常处理无效的原始 json 帖子。我尝试使用请求。 IllegalStateException:已经为此请求调用了getInputStream() 我想在这个异常上保留日志输入原始json数据。 有人能帮我吗?谢谢。 更新 作为@Sean Carrol的建议。我尝试按照建议使用HttpServletRequest estWrapper,但它仍然不起作用。 我在InputS