xuxueli / xxl-job

A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)
http://www.xuxueli.com/xxl-job/
GNU General Public License v3.0
27.46k stars 10.86k forks source link

xxl-rpc结果解析失败 #1814

Open HaiyangLiang opened 4 years ago

HaiyangLiang commented 4 years ago

Please answer some questions before submitting your issue. Thanks!

使用版本 2.2.0

问题: xxl-rpc json解析失败

2.2.0版本xxl-rpc调用api/registry结果返回json为 { "code": 200, "msg": "", "content": {} } 结果显示xxl-rpc json解析失败。 完整信息是: `2020-07-09 17:25:01.905 ERROR 21564 --- [rRegistryThread] c.xxl.job.core.util.XxlJobRemotingUtil : xxl-rpc remoting (url=http://localhost:8400/xxl-job-admin/api/registry) response content invalid({"code":200,"msg":"","content":{}}).

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 33 path $.content at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226) at com.google.gson.Gson.fromJson(Gson.java:932) at com.google.gson.Gson.fromJson(Gson.java:897) at com.google.gson.Gson.fromJson(Gson.java:846) at com.xxl.job.core.util.GsonTool.fromJson(GsonTool.java:53) at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:131) at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:42) at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 33 path $.content at com.google.gson.stream.JsonReader.nextString(JsonReader.java:826) at com.google.gson.internal.bind.TypeAdapters$16.read(TypeAdapters.java:402) at com.google.gson.internal.bind.TypeAdapters$16.read(TypeAdapters.java:390) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) ... 8 common frames omitted `

可能原因

由于AdminBizClient的registry方法结果json结果参数解析为String.class,导致content为空json解析为String失败 @Override public ReturnT<String> registry(RegistryParam registryParam) { return XxlJobRemotingUtil.postBody(addressUrl + "api/registry", accessToken, timeout, registryParam, String.class); } 请问这个问题怎么解决 @xuxueli?

aileennian commented 4 years ago

同问。

cygmris commented 3 years ago

https://github.com/xuxueli/xxl-job/issues/2141#issuecomment-763652374_

V-I-C-T-O-R commented 3 years ago

@HaiyangLiang @aileennian 试用2.2.0版本的代码没发现问题,查看是否有修改代码访问api/registry被前端拦截重定向了(集成xxl-job修改代码之后重现过此问题)

dishpzga commented 3 years ago

同问

Tiangel commented 3 years ago

我在2.3.0遇到了同样的问题。。。@xuxueli

Tiangel commented 3 years ago

我通过将ReturnT 里的 public static final ReturnT SUCCESS = new ReturnT(null); 改为 public static final ReturnT SUCCESS = new ReturnT(""); 临时解决了