【问题标题】:How to send Json-rpc via retrofit2?如何通过retrofit2发送Json-rpc?
【发布时间】: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

【问题讨论】:

    标签: android request retrofit2 json-rpc


    【解决方案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 标志,以便在您编辑原始答案时取消删除它,而不是发布新答案。
    猜你喜欢
    • 2015-02-12
    • 2015-09-15
    • 2016-07-20
    • 1970-01-01
    • 2011-12-08
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    相关资源
    最近更新 更多