Retrofit如何提交json資料
阿新 • • 發佈:2019-02-03
用了一段時間的retrofit,感覺表單提交用的很6了,但是普通的json資料該如何提交呢?我以為我是懂的,然而我錯了。
一開始,我以為是這樣提交的:
@POST("NewLifeBeta/TeaLogin")
Call<UserEntity> login(@Body JSONObect jsonObject);
然而將資料傳送過去之後我的程式喜聞樂見地崩了。
看retrofit的官方文件對於@Body是這樣描述的:
An object can be specified for use as an HTTP request body with the @Body
annotation.
@POST("users/new") Call<User> createUser(@Body User user);
The object will also be converted using a converter specified on the Retrofit
instance. If no converter is added, only RequestBody
can
be used.
雖然這句話最後的沒有新增轉換隻有RequestBody被使用我其實不是很理解(看網上的資料是有人說預設會將請求的實體類類轉換為json格式),但是我明白我之前的理解錯了,我以為傳送一個json類過去就好,沒想到Retrofit會利用轉換工廠自動將實體類轉換成json格式的資料,那麼想要傳json資料就變得非常簡單,首先我們定義一個想要傳送資料的實體類:
public class LoginUser {
public String loginname;
public String password;
public LoginUser(String loginname, String password) {
this.loginname = loginname;
this.password = password;
}
}
然後定義一個介面:
@POST("NewLifeBeta/TeaLogin") Call<UserEntity> login(@Body LoginUser loginUser);
最後:
public void login(View view) throws JSONException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("loginname","s1");
jsonObject.put("password","123456");
LoginUser loginUser = new LoginUser("s1","123456");
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitWork retrofitWork = retrofit.create(RetrofitWork.class);
Call<UserEntity> login = retrofitWork.login(loginUser);
login.enqueue(this);
}
轉換工廠這裡選擇Gson就直接會變成json格式,OK完成~