Java:retrofit2发送http网络请求

简介: Java:retrofit2发送http网络请求

文档:https://square.github.io/retrofit/

Github: https://github.com/square/retrofit

使用PythonFlask提供简易的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)

依赖

<!--retrofit2引入的依赖-->
<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>retrofit</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>converter-gson</artifactId>
    <version>2.0.0-beta3</version>
</dependency>
<!--用于测试-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13</version>
    <scope>test</scope>
</dependency>

返回的实体对象

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<Person> getPerson(@Query("name") String name);
    @POST("/post")
    Call<Person> 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<Person> call = request.getPerson("Tom");
        // Person person = call.execute();
        // 同步请求
        Response<Person> 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<String, Object> 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<Person> call = request.postPerson(requestBody);
        // 同步执行
        Response<Person> response = call.execute();
        Person person = response.body();
        System.out.println(person);
        //  Person{name='Tom', age=24}
    }
}

参考

这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)

相关文章
|
8月前
|
Java
java原生发送http请求
java原生发送http请求
|
JSON 网络协议 Java
OkHttp3发送http请求在Java中的使用方法
记录总结一下Http的get请求和post请求的使用方法和问题解决
932 0
|
JSON Java 数据格式
Java如何发起http的get请求的实现
Java如何发起http的get请求的实现
101 0
|
7月前
|
Java
Java代码 httpClient请求 响应
Java代码 httpClient请求 响应
40 0
|
Java Apache Spring
Java发送Http请求(HttpClient)
Java发送Http请求(HttpClient)
10304 2
|
Java API Apache
Java HTTP请求封装的方法及实现
在Java开发中,我们经常需要与服务器进行数据交互,发送HTTP请求是其中常见的一种方式。为了简化开发过程,我们可以封装HTTP请求的方法,让调用者只需要关注业务逻辑而不用关心底层的细节实现。本文将介绍一种基于Java的HTTP请求封装方法及其实现。
342 2
|
Java
Java HTTP多线程下载实现方法
在如今互联网高速发展的时代,对于下载来说,速度是一个非常重要的因素。而多线程下载是一种提高下载速度的常见方法。本文将介绍如何使用Java编程实现HTTP多线程下载功能。
210 0
|
JSON 网络协议 Java
java发送Http请求
java发送Http请求
Java HttpClient 如何使用代理IP请求接口
Java HttpClient 如何使用代理IP请求接口
Java 中 http请求和调用
Java 中 http请求和调用
Java 中 http请求和调用