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

如何在修改请求的正文中发布原始的整个JSON?

孟品
2023-03-14

这个问题以前可能有人问过,但没有,没有得到明确的回答。具体如何将原始的整个JSON发布到一个修改请求的主体中?

在这里见类似的问题。或者这个答案是正确的,它必须是表单url编码并作为字段传递?我真的希望不是这样,因为我连接到的服务只是希望文章正文中有原始的JSON。它们并不是为了寻找JSON数据的特定字段而设置的。

我只想和restperts一劳永逸地澄清这一点。一人回答不用改装。另一个不确定句法。另一个则认为是的,但必须将表单URL编码并放在一个字段中(在我的情况下,这是不可接受的)。不,我不能为我的Android客户端重新编码所有的服务。是的,在主要项目中发布原始JSON而不是将JSON内容作为字段属性值传递是很常见的。让我们把它弄好,继续前进。有人能指出说明这是如何完成的文档或示例吗?或提供可以/不应该这样做的正当理由。

更新:有一件事我可以百分之百肯定地说。你可以在谷歌的凌空中做到这一点。它就建在里面。我们可以在改装中这样做吗?

共有2个答案

陶涵育
2023-03-14

代替类,我们还可以直接使用hashmap object>来发送主体参数,例如

interface Foo {
  @POST("/jayson")
  FooResponse postJson(@Body HashMap<String, Object> body);
}
慕容聪
2023-03-14

@body注释定义一个请求正文。

interface Foo {
  @POST("/jayson")
  FooResponse postJson(@Body FooRequest body);
}

由于在默认情况下,reverfit使用Gson,foorequest实例将序列化为JSON,作为请求的唯一主体。

public class FooRequest {
  final String foo;
  final String bar;

  FooRequest(String foo, String bar) {
    this.foo = foo;
    this.bar = bar;
  }
}

与:

FooResponse = foo.postJson(new FooRequest("kit", "kat"));

将产生以下机构:

{"foo":"kit","bar":"kat"}

Gson文档有更多关于对象序列化如何工作的内容。

现在,如果您真的真的希望自己发送“RAW”JSON作为主体(但请为此使用Gson!)您仍然可以使用typedinput:

interface Foo {
  @POST("/jayson")
  FooResponse postRawJson(@Body TypedInput body);
}

TypedInput定义为“具有关联mime类型的二进制数据”。有两种使用上述声明轻松发送原始数据的方法:

>

  • 使用TypedByteArray发送原始字节和JSON mime类型:

    String json = "{\"foo\":\"kit\",\"bar\":\"kat\"}";
    TypedInput in = new TypedByteArray("application/json", json.getBytes("UTF-8"));
    FooResponse response = foo.postRawJson(in);
    

    子类TypedString创建TypedJsonString类:

    public class TypedJsonString extends TypedString {
      public TypedJsonString(String body) {
        super(body);
      }
    
      @Override public String mimeType() {
        return "application/json";
      }
    }
    

    然后使用类似于#1的类的实例。

  •  类似资料:
    • 问题内容: 我想修改一个传出的SOAP请求。我想从信封的主体中删除2个xml节点。我设法设置了一个拦截器,并将生成的消息的String值设置为端点。 但是,以下代码似乎不起作用,因为未按预期方式编辑外发消息。是否有人对如何执行此操作有一些代码或想法? 问题答案: 我今天也有这个问题。经过大量的哭泣和咬牙切齿,我能够在CXF源附带的configuration_interceptor演示中更改Stre

    • 我正在编写一个自定义中间件,它为每个请求生成一个加密签名(它与AWS API v4使用的身份验证机制非常相似)。为了正确生成此签名,我必须获取HTTP请求的整个原始正文。 我还使用BodyParser,它是在我的自定义中间件之后注册的。 我的自定义中间件可以这样表示: 这就是我在服务器上使用它的方式。 正如您可以验证的那样,中间件已将原始主体成功写入控制台,但请求将永远不会由注册的路由处理,连接将

    • 问题内容: 因此,根据jQuery Ajax文档 ,它在发送请求时以查询字符串的形式序列化数据,但是设置应允许我在正文中发送实际的JSON。不幸的是,我很难首先确定是否发生这种情况,其次是将对象的外观发送给服务器。我所知道的是服务器未解析我正在发送的内容。 使用http客户端发布对象文字时,它可以工作。但是当将jQuery与结合使用时,它将失败。不幸的是,当我在Safari中分析请求时,它说消息的

    • 我试图在同一个API请求中发布正文和部分数据 如下所示 但它不起作用,我出错了 @正文参数不能与窗体或多部分编码一起使用。(参数#1) 完成错误日志 07-31 05:01:01.644 6315-6315/android.os.E/AndroidRuntime: FATAL EXCEPTION: main Process:ooper.loop, PID: 6315ooper.java:135Ru

    • 我正在尝试在Spring Boot中使用WebClient制作API POST Request。但是我无法使用JSON正文发出我想要的请求并以JSONObject的形式接收响应。 JSON正文: 服务类别- 工作区模型- 主通话- 我需要发送一个JSON主体列表,作为主体post请求。请帮我做帖子请求提前谢谢

    • 我最近开始在我的android应用程序中使用改装,这是我添加用户的改装请求: 这里User是我想在服务器上注册的用户的模型类。问题是服务器需要Base64.encode()格式的json正文请求。有没有办法使用改装发送Base64编码数据? 我可以想到手动这样做: 然后在请求中传递这个。但是,我必须手动完成这项工作,并处理每个POST请求。有没有更干净的方法。