OkHttp调用外部接口时RequestBody打印相关报错问题咨询
问题排查原因
- 类结构语法错误:你当前把
client.newCall(request).execute()这类可执行语句直接定义在类的成员层级,不属于任何方法、构造函数或初始化代码块,Java语法不支持这种写法,首先会触发编译错误。所有业务执行逻辑必须放到方法内部,比如你可以单独定义一个sendRequest()方法把这些逻辑包裹进去。 - JSON参数格式错误:构造RequestBody的JSON字符串中混入了无效的
enter code here占位符,破坏了JSON的结构正确性,会导致服务端接收参数后解析失败返回错误,也会引发RequestBody相关的处理异常。修正后的JSON串应为"{ \"to\": \"0xFd4A543c162...843da09B2\", \"amount\": \"1\" }"。 - 受检异常未处理:OkHttp的
execute()是同步方法,会抛出IOException这类受检异常,代码中既没有用try-catch块包裹捕获,也没有在方法签名上声明throws IOException,运行/编译时都会触发异常报错。 - 认证参数配置错误:请求头中
Authorization的值写为"${Access-token}",Java不会自动解析这种模板占位符,你需要替换为实际的有效访问令牌,否则服务端会返回401未授权错误。 - RequestBody打印报错的原因:OkHttp的RequestBody底层流默认只能消费一次,如果你直接读取RequestBody的内容用于打印,会导致后续请求执行时无法再次读取流内容,抛出
IllegalStateException。如果需要打印请求体,建议先把请求体内容缓存为字符串再打印,或者使用OkHttp官方的HttpLoggingInterceptor拦截器统一打印请求日志。
内容的提问来源于stack exchange,提问作者David Choi
相关产品推荐
相关产品推荐

