java - 在改造 http post 请求中设置标头
问题描述
我有一个改造界面(kotlin):
interface Api {
@POST("updates")
fun getDetails(@Header("Authorization") token: Token,
@Body body: RequestBody): Single<ResponseObject>
}
当我这样称呼它时(在java中),
List<String> apps = Arrays.asList("app1", "app2");
JSONObject jsonObject = new JSONObject();
RequestBody requestBody;
try {
jsonObject.put("apps", new JSONArray(apps));
}
catch(JSONException e) {
e.printStackTrace();
}
requestBody = RequestBody.create(jsonObject.toString(), MediaType.get("application/json"));
api.getDetails(token, requestBody); // works
它工作并返回正确的数据。
我的问题是我不想为每个调用创建一个新的 RequestBody 对象,所以我不想接收 RequestBody,而是希望我的接口接收 JSON 对象。然而,当我尝试这个时,
interface Api {
@POST("updates")
fun getDetails(@Header("Authorization") token: Token,
@Header("Content-Type") type: String,
@Body body: JSONObject): Single<ResponseObject>
}
api.getDetails(token, "application/json", jsonObject); // does not work
它返回retrofit2.adapter.rxjava2.HttpException: HTTP 400
错误。
如何仅使用 JSONObject 进行此 http 调用?我认为我指定 Content-Type 的方式可能有问题,但我无法弄清楚。
解决方案
推荐阅读
- solr - 预定义的读取权限不起作用 solr
- css - 如何在css中制作这个点菜单?
- video-streaming - 流媒体服务如何运作?
- c++ - 如何在 cout 中添加变量?
- flutter - 未定义的名称“颜色”。在 Flutter 中使用 TextStyle 类时
- ansible - 如何设置和解析 openshift_master_cluster_hostname?
- php - Moodle - 在首页显示类别描述
- java - 在 Firebase Admin SDK 之上创建 REST API 控制器
- c - 当我不知道下拉列表中有多少次出现时,如何在我的序数 = 全部中传递最后一次出现?
- javascript - 检查一个大对象是否有空值