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

在返回响应的请求上修改set标记

谭灿
2023-03-14

基本上,我的问题很简单。我正在使用改版作为一个框架,用于与我不控制的服务器进行通信。我想在我的请求上设置某种类型的标记,它会在响应中自动返回。有没有办法做到这一点?

共有1个答案

许波涛
2023-03-14

我找到了一个复杂而又不酷的方法来做这件事。

0.在请求和响应类型中添加标记字段

1.自定义OKHTTP3.RequestBody以添加标记字段:

@Override public RequestBody convert(T value) throws IOException {
    Buffer buffer = new Buffer();
    Writer writer = new OutputStreamWriter(buffer.outputStream(), UTF_8);
    JsonWriter jsonWriter = gson.newJsonWriter(writer);
    adapter.write(jsonWriter, value);
    jsonWriter.close();

    TagRequestBody requestBody = TagRequestBody.create(MEDIA_TYPE, buffer.readByteString());
    requestBody = value.tag;//just for example ,you will need to check type here
    return requestBody;
  }
    @Override public T convert(ResponseBody source) throws IOException {
try {
  //the ugly part,for that retrofit will wrap the responseBody with ExceptionCatchingRequestBody.(ExceptionCatchingRequestBody extends ResponseBody) 
  ResponseBody value = source;
  if (value.getClass().getSimpleName().equals("ExceptionCatchingRequestBody")){
    ResponseBody temp = null;
    try {
      Field f = source.getClass().getDeclaredField("delegate");
      f.setAccessible(true);
      temp = (T) f.get(value);
    } catch (Exception e) {
      e.printStackTrace();
    }
    value = temp != null?temp:value;
  }
  T t = adapter.fromJson(source.charStream());
  if (value instanceof TagResponseBody) {
    t.tag = ((TagResponseBody)value).tag;
  }
  return t;
} finally {
  value.close();
}
.addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Response response = chain.proceed(chain.request());
                        if (request.body() instanceof TagRequestBody) {
                            TagResponseBody responseBody = new TagResponseBody(response.body());
                            responseBody.arg = ((TagRequestBody) request.body()).arg;
                            response = response.newBuilder()
                                    .body(responseBody)
                                    .build();
                        }
                        return response;
                    }
                })
 类似资料:
  • 我见过龙卷风文档和示例,其中self.write方法被广泛用于在超文本标记语言上呈现一些值,其中POST请求在处理程序中运行。但是我找不到关于如何将响应返回给客户的清晰信息。 例如,我正在从我的客户端调用Tornado服务器上的POST请求。接受post请求的代码为: 有了这个,我可以找到cbtp的值,有了,我可以用HTML打印它。但是,相反,我想以JSON格式将这个值返回给客户机,比如我想知道如

  • 我正在尝试对远程服务器进行api调用,最初,我遇到以下错误:

  • 我正在尝试从JavaScript应用程序向另一个应用程序中的endpoint进行API调用。 当我调用endpoint时,我得到了状态代码和消息,但我无法以任何方式访问响应体。我已经尝试了不同的方法来获取数据,但似乎没有一种方法对我有效。 在方法“someAction”中,我想使用来自API调用的响应/结果中的数据。我在代码中添加了单个日志行打印的输出。 如何在定义“result.status/m

  • 所以我想打印响应的结果,然后使用gson为模型生成数据,但响应永远不会得到返回,因为调用了onResponse。! 如果你注意到Logcat,日志。我的回答没有显示。。!?但是在使用该请求的活动的onSuccess中,它通常会显示日志,但是如果日志包含响应对象,它不会显示哪个非常奇怪,也没有任何意义。。!? Logcat公司 我尝试使用具有相同url和参数的PostMan测试请求,它通常返回jso

  • 我从这里获取信息实现了Struts2 REST API Struts2 Rest插件 Struts2中的restful插件中是否有返回自定义响应的方法。我做了所有必要的更改,如 从这个问题得到的。我仍然得到这个错误 如果我不添加上面的行,我仍然会得到相同的响应。 这是我在struts中提供的操作。xml: 这将满足所有请求,包括获取、发布、放置、更新。 在将post方法的返回类型从HttpHead

  • 问题内容: 我正在使用Node的模块发出 HTTP 请求,但是在上,返回的块似乎并不满足完整的请求响应。这是我的代码: 有没有办法在结束请求之前等待完整的输出?难道我做错了什么?谢谢! 问题答案: 您还应该收听“结束”事件