如何通过retrofit2发送Json-rpc?
Posted
技术标签:
【中文标题】如何通过retrofit2发送Json-rpc?【英文标题】:How to send Json-rpc via retrofit2? 【发布时间】:2017-12-04 11:40:56 【问题描述】:我尝试通过retrofit2
发送json-rpc
。
这是我的界面:
public interface ApiInterfaceJson
@POST
@Headers( "Content-Type: application/json" )
Call<String> getDataJson(
@Url String url,
@Body RequestBody body);
创建retrofit
:
retrofitJson = new Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.baseUrl("http://localhost:8800")
.client(client)
.build();
apiInterfaceJson = retrofitJson.create(ApiInterfaceJson.class);
呼叫:
JSONObject paramObject = new JSONObject();
try
paramObject.put("id", "0");
paramObject.put("name", "user");
paramObject.put("command", "finish");
catch(Exception e)
RequestBody requestBody= RequestBody.create(MediaType.parse("application/json"), paramObject.toString());
MinersMonitorApplication.getApiJson().getDataJson("http://10.10.10.230:10000", requestBody).enqueue(new Callback<String>()
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response)
@Override
public void onFailure(Call<String> call, Throwable t)
);
结果是SocketTimeoutException
。
【问题讨论】:
【参考方案1】:您需要 RPC 包装改造 - https://github.com/segmentio/retrofit-jsonrpc
还可以通过注解让服务看到它应该使用json RPC:
interface MultiplicationService
@JsonRPC("Arith.Multiply") @POST("/rpc")
Call<Integer> multiply(@Body MultiplicationArgs args);
请注意,Retrofit 只是基于 REST 的库。
【讨论】:
下一次提出一个 mod 标志,以便在您编辑原始答案时取消删除它,而不是发布新答案。以上是关于如何通过retrofit2发送Json-rpc?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过远程方法发送 json-rpc http post 请求并在 java 中传递加密参数
如何防止对象在 Retrofit2 的 API 调用中发送空字段