我正在重构我大学的移动应用程序api。
主要的想法是将它从jsoup迁移到改型,因为类结构更好(而且google推荐这样做)。
我发现以前的版本是围绕这个调用构建的:
Jsoup.connect(url)
.data(request.getArgs())
.ignoreContentType(true)
.method(Connection.Method.POST)
.timeout(timeout)
.execute();
哪里 .data()
args是 Map<Key, Value>
,它正在转换为 url?key1=value1&key2=vaule2&...&keyN=valueN
如jsoup文档中所述。
我已经测试了这个调用,它工作正常-返回一个json对象。
因此,有了这些信息,我试图用reformation2api重新创建这样的行为。我已经创建了一个服务接口:
public interface MyService {
@POST("url")
Call<ResponseBody> myRequest(@Query("key1") String value1, @Query("key2") String value2);
}
但是当我试图调用这个请求时,作为响应主体,我得到的是404html页面,而不是预期的json。
所以我的答案是:这两种解决方案如何形成它们的请求之间有什么区别吗?我想再深入一点,但什么也没找到。
2条答案
按热度按时间tzxcd3kk1#
好吧,jsoup是一个html解析器,而reformation是一个http客户机,所以一开始你就觉得你在用一个完全不同的工具替换一个服务于一个目的的工具。
查看每个调用正在执行的操作的最佳方法是:a)阅读每个库的文档以了解链中的每个调用正在执行的操作,或b)使用charles proxy、proxyman或fiddler等工具截获每个库所执行的调用,并比较每个库发出的请求的参数(查询参数、标头、,柱体等)。
xiozqbni2#
我只需要更仔细地阅读jsoup文档。在data()方法重载之一的描述中有一个注解:对于post请求,所有数据都将进入请求体。所以对于reformation2,我只需要使用@fieldmap属性而不是@query。