当前位置: 首页 > 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/477388/

相关文章:

  • 茂名东莞网站建设湛江网页设计开发
  • 河北手机网站制作多少钱手机网站开发成为小程序
  • 海口网站建设电话东莞中堂网站建设
  • 网站公司提供程序免费永久云服务器购买
  • 从零开始做网站内容运营制作网页和网站的区别
  • 301重定向到新网站个人社保缴费信息查询
  • 用fw做明星的网站移动端什么意思
  • 百度seo网站排名优化动态的网站怎么做
  • 网站优化 h几 更易被抓哪有做课件赚钱的网站
  • 免费企业网站报价去哪里找做网站的人
  • 重庆在线网站推广软件开发和网页设计的区别
  • 国外注册品牌 建设网站郑州seo竞价
  • 建站平台在线提交功能sem优化技巧
  • 互联网服务平台单位机动车二维码西安seo排名外包
  • 响应式网站图片代码百度广告推广费用一年多少钱
  • 厦门网站设计建设wordpress文章小尾巴
  • 不用iis建立网站网站能调用一些字体
  • 合肥网站设计机构免费ppt模板可编辑
  • 做西餐的网站无锡企业建站模板
  • 中卫网站设计公司排名网站设计计划书的内容
  • 纪念币商城网站建设深圳哪里做网站好
  • 手机淘宝官网信息如何优化上百度首页
  • 自己建公司网站可以嘛网页微信版官网登录不了
  • 手机网站二级导航菜单代写平台
  • 锦州做网站公司高端装修公司排名前十
  • 设计找图网站wordpress 漏洞检测
  • 旅游网站 源码 织梦怎么用外国的服务器做网站
  • 毕设做网站答辩一般问什么帝国cms与wordpress
  • 国家对网站建设补助wordpress 调用文章摘要
  • 企业做网站的费用怎么入账湖南刚刚发生的大事件