当前位置: 首页 > news >正文

手机百度怎么解除禁止访问网站百度推广信息流有用吗

手机百度怎么解除禁止访问网站,百度推广信息流有用吗,外贸行业有哪些工作岗位,沈阳京科男科医院项目用已经使用了 Retrofit,定义了接口方法,返回了 JSON 转换后的实体对象,炒鸡方便。但是总有意料之外的时候,比如我不需要返回实体对象,我要返回纯纯的 JSON 字符串,怎么办呢? 先看源码 通过…

在这里插入图片描述

项目用已经使用了 Retrofit,定义了接口方法,返回了 JSON 转换后的实体对象,炒鸡方便。但是总有意料之外的时候,比如我不需要返回实体对象,我要返回纯纯的 JSON 字符串,怎么办呢?

先看源码

通过一系列的源码分析,最后定位到 OkHttpCall 中的 parseResponse() 方法:
下面代码中的 parseResponse 方法是纯复制过来的,没改过,可以看出当接口返回正确的数据之后,无论如何都会调用 T body = responseConverter.convert(catchingBody),把 JSON 字符串转换成了一个 T 对象,我们没有办法通过配置什么东西来实现我们要返回纯 JSON 字符串的需求,所以要想其他办法。两个办法:1、让它转,我们再转回来;2、我们自己定义怎么转。

final class OkHttpCall<T> implements Call<T> {Response<T> parseResponse(okhttp3.Response rawResponse) throws IOException {ResponseBody rawBody = rawResponse.body();// Remove the body's source (the only stateful object) so we can pass the response along.rawResponse =rawResponse.newBuilder().body(new NoContentResponseBody(rawBody.contentType(), rawBody.contentLength())).build();int code = rawResponse.code();if (code < 200 || code >= 300) {try {// Buffer the entire body to avoid future I/O.ResponseBody bufferedBody = Utils.buffer(rawBody);return Response.error(bufferedBody, rawResponse);} finally {rawBody.close();}}if (code == 204 || code == 205) {rawBody.close();return Response.success(null, rawResponse);}ExceptionCatchingResponseBody catchingBody = new ExceptionCatchingResponseBody(rawBody);try {T body = responseConverter.convert(catchingBody);return Response.success(body, rawResponse);} catch (RuntimeException e) {// If the underlying source threw an exception, propagate that rather than indicating it was// a runtime exception.catchingBody.throwIfCaught();throw e;}}
}

方法一:返回 JSONObject 后再转 JSON 字符串

这个很简单,我们把返回实体类改成 JSONObject,然后 Converter 会帮忙我们转成 JSONObject,然后我们再转成字符串即可。缺点就是转了两轮。

// 接口定义
@POST("xxx")
fun fetch(@Body param: RequestBody): Call<JSONObject>// 使用
val response = api.fetch(param).execute()
val json = response.body()?.toJSONString() ?: ""

方法二:自定义 Converter

模仿 FastJsonResponseBodyConverter 自定义一个 Converter,直接返回字符串,不转实体对象,即可,收工。

// 自定义Converter
// 挖坑:理论上可以定义一个注解,然后判断 annotations 中是否包含此注解,
// 如果包含,则返回自定义Converter,否则返回原来的Converter。
.addConverterFactory(object : Converter.Factory() {override fun responseBodyConverter(type: Type,annotations: Array<out Annotation>,retrofit: Retrofit): Converter<ResponseBody, String> {return Converter<ResponseBody, String> { responseBody ->responseBody.use { it.string() }}}
})// 接口定义
@POST("xxx")
fun fetch(@Body param: RequestBody): Call<String>// 使用
val response = api.fetch(param).execute()
val json = response.body() ?: ""
http://www.yayakq.cn/news/23868/

相关文章:

  • 河北省建设工程招标投标协会网站平面设计类的网站
  • asp网站自动识别手机亿恩 网站备案
  • 网站推广seo招聘dede 企业网站模板下载
  • 做网站的软件micro温州本地网站平台
  • 深圳数码网站建设建设摩托125图片大全
  • 网站文件上传完成后打开网站显示网站建设中怎么回事?seo免费课程视频
  • 物流公司官方网站wordpress手机版如何在电脑
  • 做网站有谁做免费网站seo软件
  • 自己做的网站竞价推广网站建设
  • 二级网站建设管理制度网站建设的服务器
  • 08网站建设一个公司如何把网站做好
  • 网站制作的网站开发化学试剂购买网站
  • 欧美 手机网站模板下载 迅雷下载 迅雷下载地址九江企业网站制作
  • 个人域名备案网站名称网站部分乱码
  • 北京建设门户网站骄阳房地产网站
  • 下列关于网站开发中网页上传和沭阳那家做网站的
  • 给一个网站做需求分析wordpress安装教程 l
  • 贵阳做企业网站黑帽seo技术有哪些
  • 宁夏 网站开发农村社区网站建设
  • 魅族的网站建设与安全岳阳优化公司
  • 成都市建设网站公司网络营销渠道类型有哪些
  • 给企业做网站运营题库小程序源码
  • 做网站多钱汕头建站模板
  • 深圳网站建设哪家强外贸网站建设 如何做
  • 快速开发企业网站昆明城乡和住房建设局网站
  • 做暧小视频免费视频在线观看网站造型设计网站推荐
  • 包头教育云平台网站建设网络营销推广方案案例视频
  • 公司网站建设全南阳市建网站公
  • 设计颜色搭配网站wordpress cform
  • 网站响应样式wordpress标题截断