我最近开始在我的android应用程序中使用改装,这是我添加用户的改装请求:
RestAdapter mRestAdapter = new RestAdapter.Builder()
.setEndpoint(SERVER_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setRequestInterceptor(new SessionInterceptor())
.setClient(new OkClient(new OkHttpClient()))
.build();
@POST("/user/add")
JsonElement registerUser(@Body User user);
这里User是我想在服务器上注册的用户的模型类。问题是服务器需要Base64.encode()格式的json正文请求。有没有办法使用改装发送Base64编码数据?
我可以想到手动这样做:
String json = gson.toJson(user);
byte[] bytes = Base64.encode(json.getBytes("UTF-8"), Base64.DEFAULT);
然后在请求中传递这个。但是,我必须手动完成这项工作,并处理每个POST请求。有没有更干净的方法。
此答案直接适用于改装v2。0但相同的概念可适用于早期版本。
一个选项是创建一个RequestInterceptor
。根据您提供的信息,我不太确定是否每个帖子都是base 64编码的。我假设情况就是这样。
public class Base64EncodeRequestInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Request.Builder builder = originalRequest.newBuilder();
if (originalRequest.method().equalsIgnoreCase(POST)) {
builder = originalRequest.newBuilder()
.method(originalRequest.method(), encode(originalRequest.body()));
}
return chain.proceed(builder.build());
}
private RequestBody encode(RequestBody body) {
return new RequestBody() {
@Override
public MediaType contentType() {
return body.contentType();
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
Buffer buffer = new Buffer();
body.writeTo(buffer);
byte[] encoded = Base64.encode(buffer.readByteArray(), Base64.DEFAULT);
sink.write(encoded);
buffer.close();
sink.close();
}
};
}
}
这个拦截器所做的是检查传入的方法是否是
POST
,如果是,它将对RequestBody
进行base64编码。
对于一般对象类型(包括字符串),改型将使用其转换器序列化值。在本例中,默认情况下使用Gson将主体序列化为JSON。
为了上传Base64编码的数据,您需要使用TypeInput。这告诉Retromet,您将向它传递已经序列化的原始正文和相关的Content-Type值。
我已经写了下面的代码发送头,张贴参数。问题是我使用的是SendAsync,因为我的请求可以是GET或POST。我如何将POST Body添加到这个peice代码中,这样,如果有任何POST Body数据,它就会被添加到我发出的请求中,如果它是简单的GET或POST而没有Body,它就会以这种方式发送请求。请更新以下代码:
代码如下: 这将向flask发送一个{“name”:“go”}JSON字典。Flask应该将语言名称追加到数组中,并在响应中返回完整的数组。现在,当我手动发送请求时,这就工作了,所以这不是Flask的错误。但是当我从iOS发送上述内容时,我在flask控制台中得到request.json==None。很明显,我送的是一具空尸体,但我不应该。你知道我哪里出了问题吗?
问题内容: 我正在尝试发出POST请求,但无法完成。另一端什么也没收到。 这是应该如何工作的吗?我知道该功能,但我想我不能使用它,因为它不能用测试,对吗? 问题答案: 您基本上有正确的想法,只是发送错误的表格。该表格属于请求的正文。
我使用下面的代码来创建一个条目在strapi服务器,但不幸的是,我得到了"坏请求"错误。我想不出来。请指导我如何解决这个问题。 ApiSet。班 主要活动。班 我的身体。班 还有我的模型课 数据班 属性。班 最后,我得到了如下回应: 我只是想知道我在哪里犯了错误
我使用API网关触发Lambda函数,使用Lambda代理集成,但是请求体编码为base64,这是为什么?我怎样才能把它改成JSON来字符串化JSON呢?
我在网上找到了这个脚本: 但我不明白如何与PHP一起使用它,也不明白params变量内部的内容是什么,也不明白如何使用它。我能帮个忙吗?