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月前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
68 11
|
2月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
219 3
|
1月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
96 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
30天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
30天前
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。
|
1月前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
78 8
|
1月前
|
数据采集 安全 搜索推荐
HTTP代理IP纯净度 提升用户网络体验的核心竞争力
随着互联网发展,使用HTTP动态代理IP的需求日益增加。高纯净度的代理IP在隐私与安全、网络体验和业务运营方面至关重要。它能保护用户信息、提高数据安全性、确保访问速度和连接稳定,并提升业务效率与信誉度。
47 2
|
1月前
|
缓存 负载均衡 监控
HTTP代理服务器在网络安全中的重要性
随着科技和互联网的发展,HTTP代理IP中的代理服务器在企业业务中扮演重要角色。其主要作用包括:保护用户信息、访问控制、缓存内容、负载均衡、日志记录和协议转换,从而在网络管理、性能优化和安全性方面发挥关键作用。
69 2
|
2月前
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
67 13
|
1月前
|
安全 网络协议 网络安全
网络不稳定导致HTTP代理频繁掉线的分析
随着数字化时代的加速发展,网络安全、隐私保护及内容访问自由成为用户核心需求。HTTP代理服务器因其独特技术优势受到青睐,但其掉线问题频发。本文分析了HTTP代理服务器不稳定导致掉线的主要原因,包括网络问题、服务器质量、用户配置错误及IP资源问题等方面。
106 0

热门文章

最新文章