您当前的位置: 首页 >  网络

彭世瑜

暂无认证

  • 1浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java:retrofit2发送http网络请求

彭世瑜 发布时间:2020-12-30 17:57:37 ,浏览量:1

文档: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 使用教程(含实例讲解)

关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.2466s