Java-请求资源接口(REST API)的工具类(HttpUtil)

SpringBoot:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂) 不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。 关于这一点,在我当时确立好Java方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。 4面拿下了字节跳动offer 大三下学期找了一家互联网公司实习,大四的时候就已经在开始规划毕业后的打算了,关于校招也在着手准备中,当然目标要放高一些,所以阿里、腾讯这些自然要尝.. 阅读详情

请求资源接口的工具类

用处: 向一个资源链接发起请求(这里暂时只有GET),返回String类型的响应体。

import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import cn.yrcti.sup.core.common.exception.BizExceptionEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.Map;

/**
 * 请求资源接口
 */
public class HttpUtil {
    private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class);

    /**
     * 向指定URL发起Get请求,参数为params
     * @param url
     * @param params
     * @return
     */
    public static String sendGet(String url, Map<String,String> params) throws Exception,IOException
    {
        StringBuffer result = new StringBuffer();// 查询结果
        BufferedReader in = null;
        OutputStreamWriter out = null;
        try {
            String paramsString=handleParams(params);//处理参数为字符串
            System.out.println("***************请求参数*******************");
            System.out.println("param:"+paramsString);
            System.out.println("***************请求参数*******************");
            HttpURLConnection conn=getConnObject(url,"GET",paramsString); //根据请求方式和url获得相应的conn对象
            if(conn==null){
                logger.error("url处理异常!");
                return "";
            }
            conn.connect();
            // 获取URLConnection对象对应的输出流
            /*out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            // flush输出流的缓冲
            out.flush();*/
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader( new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
        } catch (IOException e){
            logger.error(url+"响应异常",e);
            throw new IOException();
        } catch (Exception e) {
            logger.error("GET请求错误!",e);
        } finally{ //使用finally块来关闭输出流、输入流
            try{
                /*if(out!=null){
                    out.close();
                }*/
                if(in!=null){
                    in.close();
                }
            } catch(IOException ex){
                logger.error("服务器异常",ex);
            }
        }
        return result.toString();
    }

    /**
     * 向指定URL发起post请求,参数为params
     * @param url
     * @param params
     * @return
     */
    public static String sendPost(String url, Map<String,String> params)
    {
        return "";
    }
    /**
     * 根据请求方式和url获得相应的conn对象
     * @param url
     * @param method
     * @return
     */
    private static HttpURLConnection getConnObject(String url,String method,String params) throws ServiceException
    {
        HttpURLConnection conn=null;
        try {
            if(method.equals("GET")) {
                if(params!=""){
                    url=url+"?"+params;
                }
                URL realUrl = new URL(url);
                conn =(HttpURLConnection) realUrl.openConnection();
                conn.setRequestMethod("GET");
            }else if(method.equals("POST")) {
                URL realUrl = new URL(url);
                conn =(HttpURLConnection) realUrl.openConnection();
                conn.setRequestMethod("POST");
            }else {
                throw new ServiceException(BizExceptionEnum.REST_API_ERROR);//接口处理异常
            }
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            //设置连接超时和读取超时
            conn.setConnectTimeout(60000);
            conn.setReadTimeout(60000);
            //conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
        }catch (MalformedURLException e){
            logger.error("无效url!",e);
        }catch (IOException e){
            logger.error("url资源获取异常!",e);
        }catch (Exception e){
            logger.error("不能处理的请求方式!");
        }
        return conn;
    }

    /**
     * Handle request params
     * @param params
     * @return
     */
    private static String handleParams(Map<String,String>params)
    {
        // 发送请求参数
        if (params != null) {
            StringBuilder param = new StringBuilder();
            for (Map.Entry<String, String> entry : params.entrySet()) {
                if(param.length()>0){
                    param.append("&");
                }
                param.append(entry.getKey());
                param.append("=");
                param.append(entry.getValue());
            }
            return param.toString();
        }else {
            return "";
        }
    }
}
Springboot+微信小程序校园拼车平台毕设全解析 Springboot作为Java后端主流开发框架,凭借简化配置与快速部署特性,为构建RESTful API提供了高效路径;微信小程序则以轻量交互和免安装优势,成为移动端业务入口的常见选择。两者结合可实现前后端分离的系统开发,广泛应用于计算机毕业设计场景。以校园拼车平台为例,系统需处理用户登录、路线发布、乘客匹配、订单状态流转等核心逻辑,涉及数据库设计、接口联调与并发控制等关键技术。该类项目既具备一定业务复杂度,又可控可演示,适合作为Springboot毕业设计课题。围绕拼车业务闭环,内容从核心功能、数据建模 阅读详情

相关推荐

安卓应用网络通信与数据处理实战

HttpUtils是一个封装了HTTP请求的工具类,它简化了网络通信的复杂性,使得开发者可以更加专注于业务逻辑的开发。这个类通常包含多种静态方法,用于处理GET、POST等HTTP请求,并且支持参数的设置、请求头的配置,以及响应数据的解析。它可能使用了如HttpClient等基础类库或者第三方库如VolleyRetrofit作为底层实现。在类结构上,HttpUtils可能具备如下组件:静态方法:用于发送请求和接收响应。请求配置:包括URL、请求方法、请求参数、请求头等。

weixin_33363025的博客 966

Guns二次开发(九):商品分类管理之【改】字诀

这篇博客我们开始来实现修改的功能。 1、详情页面的修改 还是和添加时一样,先修改详情页面的字段信息, 我直接在添加那扣一份过来,改一改就可以了 ...

weixin_42023666的博客 1309

SpringBoot多模块支付系统设计与资金风控实践

支付管理系统是Java后端开发中的高复杂度典型场景,其核心挑战在于业务逻辑爆炸、资金安全零容错与系统可维护性之间的张力。理解多模块架构的本质,关键在于区分物理分层与领域契约——它不是Maven目录划分,而是通过DDD限界上下文实现责任隔离与演进可控。SpringBoot作为主流技术栈,需结合基础设施抽象、事件驱动、幂等控制与差分对账等工程手段,构建覆盖下单、支付、退款、对账全生命周期的资金风控闭环。本文聚焦真实生产级设计决策,涵盖模块依赖治理、浮点精度规避、消息一致性保障及论文源码协同方法,为毕业设计与企业

weixin_33146151的博客 260

【模板:SpringBoot文件上传】

SpringBoot文件上传

m0_56172703的博客 422

简单封装rest api(支持http,https请求及代理模式)

现在很多主流平台采用rest方式的OpenAPI,例如小程序、聚合接口、公司内部接口、对外接口、微信接口等,很多采用rest轻量级数据传输的方式。于是乎简单封装下rest请求api(其实就是两个简单Java类,呵呵),可以实现http及https模式的请求,也支持JsessionId和代理模式,甚至系统自动发送邮件的功能也是用此工具类实现的.

Guns是一个现代化的Java应用开发基础框架,基于主流技术Spring Boot2,配套代码生成平台,DevOps运维平台

Guns v7.3.0发布,全新前后端分离版本。Guns是一个现代化的Java应用开发基础框架,基于主流技术Spring Boot2,配套代码生成平台,DevOps运维平台,CI/CD持续集成能力,在线API接口管理

DBAPI开源项目架构解析:Spring Boot + Vue.js如何构建企业级应用

DBAPI是一个基于Spring Boot和Vue.js构建的开源项目,旨在帮助开发者快速将SQL转换为REST API。本文将深入解析其架构设计,展示如何通过这一技术栈构建高效、可扩展的企业级应用。 ## 1. 项目架构概览:前后端分离的完美实践 DBAPI采用经典的前后端分离架构,前端使用Vue.js构建用户界面,后端基于Spring Boot提供API服务。这种架构不仅提高了开发效率,还

gitblog_00370的博客 436

用Python实现斗地主游戏(终端版)

马上就要过年了 大家也都放假了吧 过年必不可少的活动 打牌! 今天带大家来写一份斗地主 (又是好多天没怎么更新,忙成狗啊) 那么实现一个斗地主呢 我们肯定要先完善卡牌系统 from collections import Counter import numpy as np import itertools def cmp_to_key(mycmp): 'Convert a cmp= function into a key= function' class K: def _

Miku_wx的博客 9854

Hutool高性能HTTP客户端架构设计:连接池管理与异步处理实现原理

Hutool作为Java生态中备受青睐的工具库,其HTTP客户端模块提供了高性能、易用性强的网络通信解决方案。在微服务架构和分布式系统日益普及的今天,HTTP客户端作为系统间通信的核心组件,其性能表现直接影响着整个系统的响应速度和吞吐量。Hutool的HTTP模块通过精心设计的架构,在简化API的同时保持了卓越的性能表现,为开发者提供了专业级的HTTP通信能力。 ## 一、Hutool HTTP

gitblog_00936的博客 420

VS2017中调用gdal(C#版)的方法二(含gdal下载地址,配置过程,代码测试,超详细!!)

VS2017中gdal(C#)版的配置与测试 上次记录了直接在VS2017中下载并应用gdal的方法,这次来记录一下网上下载的安装包配置与测试的方法。 一、环境、版本及下载地址 win10,vs2017社区版,gdal2.4.4 还是像之前在Unity中应用gdal一样,最好是下载已经编译好的C#版的gdal,不然自己配置真的很容易出错,我就是这样的,下面提供不同版本的gdal下载地址: 1.GDAL2.4.4(C#版、64位): https://download.csdn.net/download/che

chengbaola的博客 1365

从零到一:基于STM8的125KHz RFID读卡器实现与曼彻斯特码解析实战

本文详细介绍了基于STM8单片机的125KHz RFID读卡器实现过程,重点解析了曼彻斯特码的编码原理与解码算法。通过硬件电路设计、软件实现及性能优化,帮助开发者低成本构建稳定读取EM4100卡片的系统,适用于门禁、考勤等应用场景。

weixin_42525211的博客 235

基于SSM框架的野生动物救助系统设计与实现

SSM框架(Spring+SpringMVC+MyBatis)是JavaEE领域经典的开发架构组合,特别适合构建中小型管理系统。其核心价值在于清晰的MVC分层架构,通过Spring的IoC容器实现组件解耦,MyBatis简化数据库操作,SpringMVC处理Web请求。这种技术组合在业务流程管理、数据可视化等场景具有显著优势,广泛应用于毕业设计和企业级应用开发。野生动物救助系统正是基于SSM框架的典型实践,解决了传统救助方式存在的信息孤岛、资源调配效率低下等问题。系统整合了地图API、微信通知等扩展功能,展

weixin_30681615的博客 397

Solidworks转URDF避坑实录:从履带机器人到ROS仿真的完整配置流程

本文详细介绍了将Solidworks履带机器人模型转换为URDF格式并配置ROS仿真的完整流程,重点解析了坐标系设置、复杂关节定义、插件配置等关键步骤中的常见问题与解决方案,帮助开发者高效实现履带机器人在RVIZ和Gazebo中的精确仿真。

weixin_30693683的博客 456

多维聚合不是GROUP BY:从数据契约到动态服务的工程实践

多维聚合是现代数据体系中连接明细数据与业务洞察的核心环节,其本质远超SQL语法层面的GROUP BY操作,而是一种面向业务语义的数据契约建立过程。它涉及维度建模的合理性、指标口径的一致性、补全逻辑的业务含义,以及服务化交付的稳定性保障。在实时分析、BI宽表构建和数仓DWS层设计等高频场景中,缺乏契约约束的聚合易导致口径混乱、下游误用与运维失控;而忽视服务层与逻辑层解耦,则会让扩展性与治理能力严重受限。本文聚焦真实生产环境中的维度补全、动态切片与指标衍生三大关键技术,结合数据契约、三层架构(物理/逻辑/服务)

weixin_30781107的博客 429

如何在 DevOps 管道中实现 AI?

AI与DevOps的融合(AIOps)正在重塑软件开发生命周期。本文系统阐述了AI在DevOps中的五大应用场景:智能监控、自动化测试、安全防护、CI/CD优化和事件管理,并提出了六步实施框架:痛点识别、工具选型、流程集成、智能监控、MLOps和治理合规。通过Netflix、Google等企业的实践案例,验证了AI在提升部署效率(降低40%故障率)、缩短问题解决时间(MTTR减少60%)方面的显著价值,同时指出数据质量、模型偏差等实施挑战。研究表明,战略性地

介绍AWS Azure GCP devops Terraform 等技术 497

OpenClaw界面操作手册:命令行与交互模式的正确打开方式

"test": {"description": "运行项目的测试套件","prompt": "请执行项目的测试命令,并分析测试结果。如果有失败的测试,请提供修复建议。},"lint": {"description": "运行代码检查","prompt": "请运行代码检查工具,分析所有警告和错误,并提供修复建议。},"doc": {"description": "为当前文件生成文档","prompt": "请为当前打开的文件生成完整的API文档,包括函数说明、参数描述、返回值类型和使用示例。

gaoxiang_120的专栏 3146

Guns二次开发(十三):自定义拦截器去除请求参数的首尾空格

关于博客中使用的Guns版本问题请先阅读 Guns二次开发目录 前面的几篇博客中有说过,前端传入的参数,后端是需要做非空、类型转换和合法性校验的,因为一些不负责任的前端在调用后端接口之前,是不会做必传参数的空值校验的。对于Guns 这种前后端没有区分的项目,因为前端后端的工作都由java开发人员包圆了,虽然能极大的保证前端检验会正常进行,但是后端校验应当作为一种硬性指标或者说是一种编程习惯,这也是我们后端人员对自己的工作负责任的一种态度,无关其他。后端校验中,前面的几篇博...

weixin_42023666的博客 2268

13、HTML 表格创建与样式设置全攻略

本文全面介绍了HTML表格的创建与样式设置方法,涵盖表格行列添加、边框控制、行和列分组(thead、tbody、tfoot、colgroup)、宽度与高度设置、内边距与间距调整,以及表格对齐方式。同时提供了最佳实践建议、常见问题解决方案及综合示例代码,帮助开发者构建结构清晰、样式美观且兼容性强的HTML表格。

blue的专栏 97

guns框架和MySQL匹配_guns 框架 [第三个] 多数据 扩展,经过测试,数据完全正确...

在guns 5.1框架的基础上,扩展了多数据源的集成方法,更方便使用!!!在此感谢下 guns 的开源作者【https://gitee.com/stylefeng/guns】1.修改配置:application.yml#多数据源情况的配置guns:muti-datasource:open: truedataConnectionPropertiesList:- dataSourceName: dat...

weixin_35050881的博客 602

基于Simulink的异步电机参数在线辨识与自适应控制仿真

本文基于Simulink平台,详细介绍了异步电机参数在线辨识与自适应控制系统的仿真实现。针对异步电机运行中参数时变问题,采用模型参考自适应系统(MRAS)实时辨识转子电阻和互感,并结合自适应PI控制策略动态调整控制器参数。通过搭建完整的矢量控制(FOC)仿真模型,验证了系统在稳态辨识、参数摄动和动态响应等工况下的性能:参数辨识误差<1.2%,转速跟踪误差<20rpm,动态响应时间<10ms。文章还提供了详细的Simulink建模步骤、核心代码实现及性能分析,为高级电机控制系统的设计与优化提

amy_mhd的博客 72

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

改造开源框架guns增加对数据内容访问权限的相关实现

改造开源框架guns增加对数据内容访问权限的相关实现 使用guns框架已经有一段时间了,前端时间发现stylefeng发布了7.1.2的版本,对比之前的版本做了重大的改变,新架构的思想看起来很先进,刚好有新项目要做,所以决定用这个新版本来进行。 做了一部分之后发现,新版本的guns中好像未对数据内容的访问权限进行实现,只能自己研究实现了。 以下是实现步骤,在此做记录。 在kernel-d-auth中增加类,cn.stylefeng.roses.kernel.auth.api.util.DataScopeP

huaya1127的专栏 1418

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Redis存取工具

一、上代码 package cn.stylefeng.guns.core.util; import cn.stylefeng.roses.core.util.ToolUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.Re

于双瑜的博客 347

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

guns 框架 [第三个] 多数据 扩展,经过测试,数据完全正确

在guns 5.1框架的基础上,扩展了多数据源的集成方法,更方便使用!!! 在此感谢下 guns 的开源作者【https://gitee.com/stylefeng/guns】 1.修改配置:application.yml #多数据源情况的配置 guns: muti-datasour...

chuangan2882的博客 503

Java 调用 Restful 接口

package com.chq.demo.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net...

程诺 1929

java:程序包不存在

下面语句含义:查找jar包先在本地仓库查找 并添加下列信息 原文档发文助手说太短了不让发,真是智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智障智

qq_45672914的博客 563
上一篇: Java Web之Servlet的创建和详细原理
下一篇: 分组从客户机到服务器过程中的心酸故事(从完整的抓包数据来理解TCP三次握手四次挥手和数据传输过程)
define_YIDA
博客等级 码龄9年 323粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值