Java 企业级工具类全家桶-68-HTTP请求工具类 目录一、工具类功能二、所需环境三、方法与调用示例按需调用四、工具类源码可直接复制一、工具类功能基于 JDK 内置HttpClient发 GET/POST 请求拿回来的直接是业务对象——单个对象、List/Map这类泛型结构也可以就是响应原文非 2xx 把状态码与完整错误体一并交回。二、所需环境JDK 17或以上 Spring Boot 3.x或以上dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdscopeprovided/scope/dependency三、方法与调用示例按需调用方法序号1方法用途发一个 GET 请求把响应直接读成指定类型的对象对接 REST 接口取单个对象不用再手写解析方法定义public static R R get(String url, ClassR responseType)️入参解释public static R R get(请求地址, 目标类型)返回值解释R与目标类型同一个类型边界口径目标类型传String.class拿响应体原文传Void.class表示不关心返回体响应体在内存里读上限 8 MiBMAX_RESPONSE_BYTES超限立即断开不用于下载大文件非 2xx 抛HttpStatusException带状态码、最终地址、响应头与完整错误体可用bodyAs(Class)一步解成对象只放行http/https且必须有主机名其余协议抛IllegalArgumentException重定向按NORMAL跟随自定义请求头会被带到跳转后的地址跳转目标不可控时别在头里放凭据方法示例get(textUrl, String.class)原生返回 拿到这段不是 JSONget(userUrl, User.class)返回对象 拿到User[name张三, age18]方法序号2方法用途发 GET 请求并把响应读成List/Map这类泛型结构接口返回数组时直接拿到对象列表方法定义public static R R get(String url, TypeReferenceR responseType)️入参解释public static R R get(请求地址, 泛型类型)返回值解释R由泛型类型引用决定如ListUser边界口径泛型入参写new TypeReference() {}目标类型由接收变量推断响应体在内存里读上限 8 MiBMAX_RESPONSE_BYTES超限立即断开不用于下载大文件非 2xx 抛HttpStatusException带状态码、最终地址、响应头与完整错误体可用bodyAs(Class)一步解成对象只放行http/https且必须有主机名其余协议抛IllegalArgumentException重定向按NORMAL跟随自定义请求头会被带到跳转后的地址跳转目标不可控时别在头里放凭据方法示例get(usersUrl, new TypeReference() {})返回集合列表 拿到[User[name张三, age18], User[name李四, age20]]方法序号3方法用途GET 的全参版要带查询参数、自定义请求头或单独设超时时用不用为了这几个选项自己拼 URL方法定义public static R R get(String url, MapString, String queryParams, MapString, String headers, Duration requestTimeout, ClassR responseType)️入参解释public static R R get(请求地址, 查询参数, 请求头, 本次超时, 目标类型)返回值解释R与目标类型同一个类型边界口径默认只带Accept: application/json同名头以传入的headers为准覆盖它就是发表单请求的做法请求超时按本次调用生效默认 30 秒DEFAULT_REQUEST_TIMEOUT且约束延伸到响应体每一块不只是响应头连接超时固定 10 秒全局共用一个HttpClient自带连接池不要每次请求新建响应体在内存里读上限 8 MiBMAX_RESPONSE_BYTES超限立即断开不用于下载大文件非 2xx 抛HttpStatusException带状态码、最终地址、响应头与完整错误体可用bodyAs(Class)一步解成对象只放行http/https且必须有主机名其余协议抛IllegalArgumentException重定向按NORMAL跟随自定义请求头会被带到跳转后的地址跳转目标不可控时别在头里放凭据方法示例get(url, params, headers, timeout, String.class)原生返回 拿到{name:张三,age:18}get(url, params, headers, timeout, User.class)返回对象 拿到User[name张三, age18]方法序号4方法用途GET 全参版的泛型结构入口既要带参数与自定义头、又要读回List/Map时用方法定义public static R R get(String url, MapString, String queryParams, MapString, String headers, Duration requestTimeout, TypeReferenceR responseType)️入参解释public static R R get(请求地址, 查询参数, 请求头, 本次超时, 泛型类型)返回值解释R由泛型类型引用决定边界口径参数、请求头与超时口径同方法3返回形态与方法2 一致响应体在内存里读上限 8 MiBMAX_RESPONSE_BYTES超限立即断开不用于下载大文件非 2xx 抛HttpStatusException带状态码、最终地址、响应头与完整错误体可用bodyAs(Class)一步解成对象只放行http/https且必须有主机名其余协议抛IllegalArgumentException重定向按NORMAL跟随自定义请求头会被带到跳转后的地址跳转目标不可控时别在头里放凭据方法示例get(usersUrl, params, headers, timeout, new TypeReference() {})返回集合列表 拿到[User[name张三, age18], User[name李四, age20]]方法序号5方法用途发一个 JSON POST把请求体对象直接序列化发出去响应读回指定类型的对象创建类接口一步完成方法定义public static R R post(String url, Object body, ClassR responseType)️入参解释public static R R post(请求地址, 请求体, 目标类型)返回值解释R与目标类型同一个类型边界口径请求体是String就原样发送其余对象按 JSON 序列化日期写成 ISO-8601byte[]会被 Jackson 写成 base64 字符串本类不用于传原始二进制默认带Content-Type: application/json; charsetUTF-8发表单要自己覆盖这个头响应里多出来的字段不会让解析报错响应体在内存里读上限 8 MiBMAX_RESPONSE_BYTES超限立即断开不用于下载大文件非 2xx 抛HttpStatusException带状态码、最终地址、响应头与完整错误体可用bodyAs(Class)一步解成对象只放行http/https且必须有主机名其余协议抛IllegalArgumentException重定向按NORMAL跟随自定义请求头会被带到跳转后的地址跳转目标不可控时别在头里放凭据方法示例post(url, form, String.class)原生返回 拿到{orderId:SO20260930001,created:true}post(url, form, CreateResult.class)返回对象 拿到CreateResult[orderIdSO20260930001, createdtrue]方法序号6方法用途POST 的泛型结构入口接口返回一批对象时直接读成List实体方法定义public static R R post(String url, Object body, TypeReferenceR responseType)️入参解释public static R R post(请求地址, 请求体, 泛型类型)返回值解释R由泛型类型引用决定边界口径请求体与请求头口径同方法5响应体在内存里读上限 8 MiBMAX_RESPONSE_BYTES超限立即断开不用于下载大文件非 2xx 抛HttpStatusException带状态码、最终地址、响应头与完整错误体可用bodyAs(Class)一步解成对象只放行http/https且必须有主机名其余协议抛IllegalArgumentException重定向按NORMAL跟随自定义请求头会被带到跳转后的地址跳转目标不可控时别在头里放凭据方法示例post(listUrl, form, new TypeReference() {})返回集合列表 拿到[CreateResult[orderIdSO20260930002, createdtrue], CreateResult[orderIdSO20260930003, createdtrue]]方法序号7方法用途POST 的全参版要带查询参数、自定义头或单独设超时时用覆盖Content-Type就能发表单方法定义public static R R post(String url, Object body, MapString, String queryParams, MapString, String headers, Duration requestTimeout, ClassR responseType)️入参解释public static R R post(请求地址, 请求体, 查询参数, 请求头, 本次超时, 目标类型)返回值解释R与目标类型同一个类型边界口径同名头以传入的headers为准把Content-Type换成application/x-www-form-urlencoded即发表单超时与连接复用口径同方法3响应体在内存里读上限 8 MiBMAX_RESPONSE_BYTES超限立即断开不用于下载大文件非 2xx 抛HttpStatusException带状态码、最终地址、响应头与完整错误体可用bodyAs(Class)一步解成对象只放行http/https且必须有主机名其余协议抛IllegalArgumentException重定向按NORMAL跟随自定义请求头会被带到跳转后的地址跳转目标不可控时别在头里放凭据方法示例post(url, form, params, headers, timeout, String.class)原生返回 拿到{name:张三}post(url, form, params, headers, timeout, FormEcho.class)返回对象 拿到FormEcho[name张三]方法序号8方法用途POST 全参版的泛型结构入口带参数与自定义头的同时把响应读成List/Map方法定义public static R R post(String url, Object body, MapString, String queryParams, MapString, String headers, Duration requestTimeout, TypeReferenceR responseType)️入参解释public static R R post(请求地址, 请求体, 查询参数, 请求头, 本次超时, 泛型类型)返回值解释R由泛型类型引用决定边界口径参数、请求头与超时口径同方法7返回形态与方法6 一致响应体在内存里读上限 8 MiBMAX_RESPONSE_BYTES超限立即断开不用于下载大文件非 2xx 抛HttpStatusException带状态码、最终地址、响应头与完整错误体可用bodyAs(Class)一步解成对象只放行http/https且必须有主机名其余协议抛IllegalArgumentException重定向按NORMAL跟随自定义请求头会被带到跳转后的地址跳转目标不可控时别在头里放凭据方法示例post(listUrl, form, params, headers, timeout, new TypeReference() {})返回集合列表 拿到[CreateResult[orderIdSO20260930002, createdtrue], CreateResult[orderIdSO20260930003, createdtrue]]方法序号9方法用途把键值对拼成 URL 查询串自己管请求或用别的客户端时也能复用同一套编码口径方法定义public static String toQueryString(MapString, String params)️入参解释public static String toQueryString(键值对)返回值解释String已按 UTF-8 百分号编码的查询串不带前导?边界口径键与值都按 UTF-8 百分号编码中文与保留字符不会拼坏参数不合法如params为null抛IllegalArgumentException它只是编码工具不参与任何请求发送方法示例toQueryString(Map.of(name, zhangsan, addr, xx街道))返回编码串 拿到namezhangsanaddrxx%E8%A1%97%E9%81%93四、工具类源码可直接复制领取方式 关注点赞收藏私信回复「java工具类」可领取100个工具类「Java企业级工具类全家桶1-100」的完整源码。 工具类已调试通过复制粘贴即可使用省时省力 可保存到自己网盘永久有效觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~