使用JSON字符串实现POST
//@Body表示输入的参数为非表单请求体,JsonBean用于解析返回的响应题内的Json字符串
@POST("postTest")
Call<JsonBean> postTest(@Body RequestBody body);
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://10.0.2.2:5000/")
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
GetRequest_Interface request=retrofit.create(GetRequest_Interface.class);
String json="{\n" +
" \"cmd\":\"test\",\n" +
" \"fund_key\":12345\n" +
"}";
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),json);
Call<JsonBean> repos=request.postTest(body);
JsonBean productResult=repos.execute().body(); //响应体解析成对应的java类
我们首先尝试了最为常用的通过JSON发出POST请求。同时也可以看到retrofit在处理返回的JSON数据上非常的高效,简洁。
使用表单提交POST
@POST("postTest")
@FormUrlEncoded//表示提交表单数据,@Field注解键名
Call<JsonBean> postTest(@Field("cmd") String cmd,@Field("fund_key") int key);
//对应请求的实现
GetRequest_Interface request=retrofit.create(GetRequest_Interface.class);
Call<JsonBean> repos=request.postTest("want",1234);
/////////////////////////////////////////////////////////////////////////////
//对应请求的实现
@POST("postTest")
@FormUrlEncoded//@FieldMap表示提交的表单数据
Call<JsonBean> postTest(@FieldMap HashMap<String,Object> map);
Map<String,Object> maps=new HashMap<>();
maps.put("cmd","want");
maps.put("fund_key",11234);
Call<JsonBean> repos=request.postTest((HashMap<String, Object>) maps);
/////////////////////////////////////////////////////////////////////////////
@POST("postTest")
@Multipart//支持文件上传的表单
Call<JsonBean> postTest(@Part("cmd")String cmd,@Part("fund_key",@Part MultipartBody.Part file) int key);
RequestBody file=RequestBody.create(MediaType.parse("application/octet-stream"),"这是一个文件");
MultipartBody.Part part=MultipartBody.Part.createFormData("file","file.txt",file);
Call<JsonBean> repos=request.postTest("main",254,part);