Java 如何使用jsonrpc4j客户端将对象作为参数传递?

Java 如何使用jsonrpc4j客户端将对象作为参数传递?,java,json,kotlin,json-rpc,jsonrpc4j,Java,Json,Kotlin,Json Rpc,Jsonrpc4j,我正在尝试编写一个Kotlin客户端,它使用jsonrpc4j()与运行在Android设备上的服务器进行通信。这是我正在使用的服务器: 调用采用单个参数的方法,例如null或单个String对象可以正常工作。但是,如果我尝试调用方法boolean exist(选择器obj)方法匹配不起作用,我得到一个异常: Invalid method parameters com.googlecode.jsonrpc4j.JsonRpcClientException: Invalid method para

我正在尝试编写一个Kotlin客户端,它使用jsonrpc4j()与运行在Android设备上的服务器进行通信。这是我正在使用的服务器:

调用采用单个参数的方法,例如
null
或单个
String
对象可以正常工作。但是,如果我尝试调用方法
boolean exist(选择器obj)方法匹配不起作用,我得到一个异常:

Invalid method parameters
com.googlecode.jsonrpc4j.JsonRpcClientException: Invalid method parameters
    at com.googlecode.jsonrpc4j.DefaultExceptionResolver.createJsonRpcClientException(DefaultExceptionResolver.java:53)
    at com.googlecode.jsonrpc4j.DefaultExceptionResolver.resolveException(DefaultExceptionResolver.java:28)
    at com.googlecode.jsonrpc4j.JsonRpcClient.handleErrorResponse(JsonRpcClient.java:272)
    at com.googlecode.jsonrpc4j.JsonRpcClient.readResponse(JsonRpcClient.java:196)
    at com.googlecode.jsonrpc4j.JsonRpcClient.readResponse(JsonRpcClient.java:531)
    at com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:148)
    at com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:118)
    at com.googlecode.jsonrpc4j.JsonRpcHttpClient.invoke(JsonRpcHttpClient.java:176)
    ...

以下是我的测试代码:

@Test fun methodTest() {
    val client = JsonRpcHttpClient(URL("http://localhost:9008/jsonrpc/0"))
    val invoke = client.invoke("ping", null, Object::class.java)
    println(invoke) // prints "pong"
    val selector = Selector()
    selector.packageName = "com.company.appname"
    val exists = client.invoke("exist", selector, Boolean::class.java) // throws Exception
    println(exists)
}
我调试了服务器代码,看起来选择器类型丢失,所有参数都“展平”为字符串列表:

09-17 18:05:58.216 D/UIAutomatorStub(17611):URI:/jsonrpc/0,方法: POST,标题:{content length=620,remote addr=127.0.0.1, http客户端ip=127.0.0.1,主机=localhost:9008, 内容类型=应用程序/json rpc,连接=保持活动, 缓存控制=无缓存,pragma=无缓存,用户代理=Java/1.8.0_265, accept=text/html,image/gif,image/jpeg,*;q=.2,/;q=.2},参数, {NanoHttpd.QUERY_STRING=null},文件: {postData={“id”:“61840997”,“jsonrpc”:“2.0”,“方法”:“exist”,“params”:{“packageName”:“com.company.appname”,“text”:null,“className”:null,“description”:null,“textContains”:null,“textStartsWith”:null,“classNameMatches”:null,“descriptionMatches”:null,“descriptionStartsWith”:null,“checkable”:false,“checked”:false,“clickable”:false,“scrollable”:false,“longClickable”:false,“enabled”:false,“focusable”:false,“focused”:false,“selected”:false,“packageNameMatches”:null,“resourceId”:null,“mask”:0,“childOrSiblingSelector”:[],“childOrSibling”:[],“index”:0,“instance”:0}}}}

我将
选择器
类从服务器复制到宿主项目中,并按原样使用它:

我还尝试用
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,property=“class”)
注释该类,但唯一的效果是它在“params”中添加了一个“class”属性


如何使其工作,以便在客户端使用服务器的参数类型?

为什么不尝试Kotlin序列化:为什么不尝试Kotlin序列化: