Java:retrofit2发送http网络请求

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

文档: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)

依赖

<!--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}
    }
}
相关文章
|
1月前
|
JSON Java 数据安全/隐私保护
java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
|
1月前
状态码对于理解HTTP请求和响应的流程,以及调试网络问题非常重要
【5月更文挑战第15天】HTTP状态码由三位数字表示,分为1xx-5xx五类。1xx为信息响应,2xx表示成功,如200(请求成功)、201(创建成功)。3xx是重定向,如301(永久移动)、302(临时重定向)。4xx表示客户端错误,如400(坏请求)、404(未找到)。5xx是服务器错误,包括500(内部服务器错误)和503(服务不可用)。这些状态码用于理解请求响应流程和调试网络问题。
26 1
|
1月前
|
缓存 安全 前端开发
探索HTTP协议:网络通信的基石
探索HTTP协议:网络通信的基石
|
14天前
|
移动开发 Java
Java Socket编程 - 基于Socket实现HTTP下载客户端
Java Socket编程 - 基于Socket实现HTTP下载客户端
15 1
|
17天前
|
网络协议 前端开发 Java
网络原理 - HTTP / HTTPS(4)——构造http请求
网络原理 - HTTP / HTTPS(4)——构造http请求
14 1
|
17天前
|
存储 JSON 安全
网络原理 - HTTP / HTTPS(2)——http请求
网络原理 - HTTP / HTTPS(2)——http请求
16 1
|
10天前
|
存储 分布式计算 大数据
MaxCompute操作报错合集之通过UDF调用异常(其他使用http调用正常)。报错:java.lang.NoSuchMethodError:是什么导致的
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
14天前
|
JSON 安全 Java
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
18 0
|
17天前
|
JSON 缓存 前端开发
网络原理 - HTTP / HTTPS(3)——http响应
网络原理 - HTTP / HTTPS(3)——http响应
11 0
|
17天前
|
前端开发 网络协议 JavaScript
网络原理 - HTTP / HTTPS(1)——http请求
网络原理 - HTTP / HTTPS(1)——http请求
9 0

热门文章

最新文章