文档:https://square.github.io/retrofit/ Github: https://github.com/square/retrofit
使用Python Flask提供简易的api测试服务
# -*- coding: utf-8 -*-
import random
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/get")
def get():
"""通过get方式传递查询参数"""
name = request.args.get("name")
age = random.randint(10, 30)
data = {
"name": name,
"age": age,
}
return jsonify(data)
@app.route("/post", methods=['POST'])
def post():
"""通过post方式提交json数据"""
name = request.json.get("name")
age = random.randint(10, 30)
data = {
"name": name,
"age": age,
}
return jsonify(data)
if __name__ == '__main__':
app.run(debug=True)
依赖
com.squareup.retrofit2
retrofit
2.9.0
com.squareup.retrofit2
converter-gson
2.0.0-beta3
junit
junit
4.13
test
返回的实体对象
package com.demo.http;
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
请求接口
package com.demo.http;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface ApiService {
@GET("/get")
Call getPerson(@Query("name") String name);
@POST("/post")
Call postPerson(@Body RequestBody body);
}
测试代码
package com.demo.http;
import com.google.gson.Gson;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import org.junit.BeforeClass;
import org.junit.Test;
import retrofit2.Call;
import retrofit2.GsonConverterFactory;
import retrofit2.Response;
import retrofit2.Retrofit;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class RequestTest {
// 请求地址
private static final String BASE_URL = "http://127.0.0.1:5000/";
// json
private static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
private static Retrofit retrofit;
@BeforeClass
public static void setUp() {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
// 类型转换 Could not locate ResponseBody converter for class
.addConverterFactory(GsonConverterFactory.create())
.build();
}
/**
* GET 测试
*
* @throws IOException
*/
@Test
public void testGet() throws IOException {
ApiService request = retrofit.create(ApiService.class);
Call call = request.getPerson("Tom");
// Person person = call.execute();
// 同步请求
Response response = call.execute();
Person person = response.body();
System.out.println(person);
// Person{name='Tom', age=10}
}
/**
* POST json 测试
*
* @throws IOException
*/
@Test
public void testPost() throws IOException {
ApiService request = retrofit.create(ApiService.class);
// body参数
Map map = new HashMap();
map.put("name", "Jack");
Gson gson = new Gson();
String body = gson.toJson(map);
System.out.println(body);
RequestBody requestBody = RequestBody.create(body, JSON);
Call call = request.postPerson(requestBody);
// 同步执行
Response response = call.execute();
Person person = response.body();
System.out.println(person);
// Person{name='Tom', age=24}
}
}
参考 这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)