Android 使用未声明的JSON正文改装GET

Android 使用未声明的JSON正文改装GET,android,retrofit,Android,Retrofit,我想将一个@Body的JSON提交给一个改型声明的接口方法,该接口方法不是由Java对象表示的。我找不到任何文档或其他人在这方面取得成功,因此我希望能够做到以下几点: @GET("/my/api/call") void getStuff(@Body String myDynamicJson); 或 但这些信息会传递到需要Java对象的封送器中。我想知道如何在不使用自定义反序列化器(我的目的地)对某些伪动态Java对象进行改造或黑客攻击的情况下实现这一点。这是处理动态服务器提供的结构所必需的,应

我想将一个@Body的JSON提交给一个改型声明的接口方法,该接口方法不是由Java对象表示的。我找不到任何文档或其他人在这方面取得成功,因此我希望能够做到以下几点:

@GET("/my/api/call")
void getStuff(@Body String myDynamicJson);


但这些信息会传递到需要Java对象的封送器中。我想知道如何在不使用自定义反序列化器(我的目的地)对某些伪动态Java对象进行改造或黑客攻击的情况下实现这一点。这是处理动态服务器提供的结构所必需的,应用程序动态解释该结构,然后根据动态参数(可以是复杂的对象本身,而不仅仅是名称:值对)发回值。

声明
@Body
注释以获取对象

@Body Object body
然后可以传入字符串、Java对象等,它们将解析为json内容

String body = "testing"

Content-Type: application/json; charset=UTF-8
Content-Length: 9
"testing"
或者作为一个对象

SampleClass body = new SampleClass(10, "hello")

Content-Type: application/json; charset=UTF-8
Content-Length: 24
{"id":10,"name":"hello"}
或者作为JSONObject

JsonObject obj = new JsonObject();
obj.addProperty("id", 10);
obj.addProperty("name", "hello");
body = obj;

Content-Type: application/json; charset=UTF-8
Content-Length: 24
{"id":10,"name":"hello"}

您所说的“不由Java对象表示”是什么意思?您试图发送非本机Json?这意味着我不想用Java对象对Json进行对象建模,我希望能够动态决定结构。事实证明,我的第一个选项确实有效。我在这方面遇到了问题,可能是以前的库版本或其他版本,所以我认为它不起作用。第二个是我不想要的,因为它需要我在Java对象中定义对象层次结构(我需要它是完全动态的)。看起来使用“@Body-String-Body”确实有效,但我发誓我以前在这方面遇到过问题(它被额外的大括号或类似的东西包裹起来),但可能这是以前的库版本。最后实现了一个Java对象,该对象目前采用了一些通用类型,它有一个自定义序列化程序来根据需要格式化子类型。不是完全动态的,但对我现在所做的工作有效。将自第一个选项起标记为已接受works@ColinM. - 这也适用于从头创建的JSONObject,这可能是您试图实现的。尝试并返回与SampleClass输出相同的结果。
JsonObject obj = new JsonObject();
obj.addProperty("id", 10);
obj.addProperty("name", "hello");
body = obj;

Content-Type: application/json; charset=UTF-8
Content-Length: 24
{"id":10,"name":"hello"}