Closed developer-playable closed 1 year ago
看了一下源码 在 com.dtflys.forest.http.ForestRequestType 文件中
/**
* 此类型请求是否一定需要Body
*
* @return {@code true}: 需要, 否则不需要
*/
public boolean isNeedBody() {
return !this.equals(GET) && !this.equals(HEAD) && !this.equals(OPTIONS);
}
做了强制过滤限制,是否可以增加一个选项,让用户来决定是否要使用Body?
目前看主要问题是在 com.dtflys.forest.backend.okhttp3.executor.OkHttp3Executor 中 方法
protected void prepareMethodAndBody(Request.Builder builder, final LifeCycleHandler lifeCycleHandler) { ForestRequestType type = request.getType() == null ? ForestRequestType.GET : request.getType(); if (type.isNeedBody()) { BODY_BUILDER.buildBody(builder, request, lifeCycleHandler); } else { builder.method(type.getName(), null); } }
这块应该和 com.dtflys.forest.backend.body.AbstractBodyBuilder 中方法 buildBody
ForestBody reqBody = request.getBody(); boolean needRequestBody = request.getType().isNeedBody() || !reqBody.isEmpty() || !request.getMultiparts().isEmpty();
做一样的处理,不仅仅判断 isNeedBody(),而是如果有传body值就一样构建
最后临时对应处理,在配置文件中修改 后端HTTP框架 backend: okhttp3 改成 backend: httpclient
详细看了官方文档说明,明白了作者关于GET请求带body的可能问题 官方提供了灵活的backend切换方案,可以根据实际情况对应,为作者点赞
@Get void some(@JSONBody User data) 或者 @Get void some(@JSONBody("name") name, @JSONBody("age") age)
请求的时候 参数数据不会放入 Body块中 @Post正常生成Body数据块,但某些场景需要使用@Get