当前位置: 首页 > news >正文

使用hutool封装http请求

今天写代码的时候,发现需要使用后台进行http请求的时候,发现自己没有一个请求的封装,这就很不好了,于是乎就要一劳永逸自己写一个工具类进行调用,话不多说开干!

1.首先引入pom

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency> 
<!--JSON-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
<!--    hutool工具    -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.9</version>
        </dependency> 

 2.封装返回处理

比较简单的写了一下,使用自己项目里的就可以

public enum ResultCode {
    /* 成功 */
    SUCCESS(200, "成功"),

    /* 默认失败 */
    COMMON_FAIL(999, "失败"),

    /* 参数错误:1000~1999 */
    PARAM_NOT_VALID(1001, "参数无效"),
    PARAM_IS_BLANK(1002, "参数为空"),
    PARAM_TYPE_ERROR(1003, "参数类型错误"),
    PARAM_NOT_COMPLETE(1004, "参数缺失"),

    /* 业务错误 */
    NO_PERMISSION(3001, "没有权限");
    private Integer code;
    private String message;

    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 根据code获取message
     *
     * @param code
     * @return
     */
    public static String getMessageByCode(Integer code) {
        for (ResultCode ele : values()) {
            if (ele.getCode().equals(code)) {
                return ele.getMessage();
            }
        }
        return null;
    }
}
/**
 * @Author: zm
 * @Description: 统一返回实体
 * @Date: 2022/4/24 8:51
 */
public class JsonResult<T> implements Serializable {
    private Boolean success;
    private Integer errorCode;
    private String errorMsg;
    private T data;

    public JsonResult() {
    }

    public JsonResult(boolean success) {
        this.success = success;
        this.errorCode = success ? ResultCode.SUCCESS.getCode() : ResultCode.COMMON_FAIL.getCode();
        this.errorMsg = success ? ResultCode.SUCCESS.getMessage() : ResultCode.COMMON_FAIL.getMessage();
    }

    public JsonResult(boolean success, ResultCode resultEnum) {
        this.success = success;
        this.errorCode = success ? ResultCode.SUCCESS.getCode() : (resultEnum == null ? ResultCode.COMMON_FAIL.getCode() : resultEnum.getCode());
        this.errorMsg = success ? ResultCode.SUCCESS.getMessage() : (resultEnum == null ? ResultCode.COMMON_FAIL.getMessage() : resultEnum.getMessage());
    }

    public JsonResult(boolean success, T data) {
        this.success = success;
        this.errorCode = success ? ResultCode.SUCCESS.getCode() : ResultCode.COMMON_FAIL.getCode();
        this.errorMsg = success ? ResultCode.SUCCESS.getMessage() : ResultCode.COMMON_FAIL.getMessage();
        this.data = data;
    }

    public JsonResult(boolean success, ResultCode resultEnum, T data) {
        this.success = success;
        this.errorCode = success ? ResultCode.SUCCESS.getCode() : (resultEnum == null ? ResultCode.COMMON_FAIL.getCode() : resultEnum.getCode());
        this.errorMsg = success ? ResultCode.SUCCESS.getMessage() : (resultEnum == null ? ResultCode.COMMON_FAIL.getMessage() : resultEnum.getMessage());
        this.data = data;
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public Integer getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(Integer errorCode) {
        this.errorCode = errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

public class ResultTool {
    public static <T> JsonResult<T> success() {
        return new JsonResult<T>(true);
    }

    public static <T> JsonResult<T> success(T data) {
        return new JsonResult<T>(true, data);
    }

    public static <T> JsonResult<T> fail() {
        return new JsonResult<T>(false);
    }

    public static <T> JsonResult<T> fail(ResultCode resultEnum) {
        return new JsonResult<T>(false, resultEnum);
    }
    public static <T> JsonResult<T> fail(boolean success,T data) {
        return new JsonResult<T>(false, data);
    }
}

3.封装http请求

我们基于hutool的HttpRequest请求进行自己代码的封装

package com.zm.test.utils;

import cn.hutool.core.map.MapUtil;
import cn.hutool.http.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zm.test.commons.result.JsonResult;
import com.zm.test.commons.result.ResultTool;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * http请求处理
 * 默认json格式请求
 * @author zm
 * @date 2025/3/7
 */
@Slf4j
public class HttpUtils {

    private static final Map<String,String> initHeaderMap= new HashMap<>();
    static {
        initHeaderMap.put(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue());
    }

    /**
     * get请求
     * @param url 路径
     * @param clazz 返回实体
     * @param <T> 自定义实体
     * @return T
     */
    public static <T> JsonResult<T> httpGet(String url, Class<T> clazz){
        try{
            HttpResponse getResponse=HttpRequest.get(url)
                    .headerMap(initHeaderMap,false)
                    .execute();
            String body=getResponse.body();
            if(getResponse.isOk()){
                return ResultTool.success(JSONObject.parseObject(body, clazz));
            }
            log.info("GET请求错误:返回状态码:{},返回信息:{}",getResponse.getStatus(),body);
            return ResultTool.fail(false,JSONObject.parseObject(body, clazz));
        }catch (HttpException e){
            log.error("GET请求失败:{}",e.getMessage());
            return ResultTool.fail();
        }
    }

    /**
     * get请求
     * @param url 路径
     * @param param 请求参数
     * @param clazz 返回实体
     * @param <T> 自定义实体
     * @return T
     */
    public static <T> JsonResult<T> httpGet(String url, Map<String,Object> param,Class<T> clazz){
        try{
            HttpResponse getResponse=HttpRequest.get(url)
                    .headerMap(initHeaderMap,false)
                    .form(param)
                    .execute();
            String body=getResponse.body();
            if(getResponse.isOk()){
                return ResultTool.success(JSONObject.parseObject(body, clazz));
            }
            log.info("GET请求错误:返回状态码:{},返回信息:{}",getResponse.getStatus(),body);
            return ResultTool.fail(false,JSONObject.parseObject(body, clazz));
        }catch (HttpException e){
            log.error("GET请求失败:{}",e.getMessage());
            return ResultTool.fail();
        }
    }

    /**
     * get请求自定义header
     * @param url 路径
     * @param param 请求参数
     * @param header 请求头
     * @param clazz 返回实体
     * @param <T> 自定义实体
     * @return T
     */
    public static <T> JsonResult<T> httpGet(String url,Map<String,Object> param,Map<String,String> header, Class<T> clazz){
        try{
            HttpResponse getResponse=HttpRequest.get(url)
                    .headerMap(MapUtil.isEmpty(header)?initHeaderMap:header,false)
                    .form(param)
                    .execute();
            String body=getResponse.body();
            if(getResponse.isOk()){
                return ResultTool.success(JSONObject.parseObject(body, clazz));
            }
            log.info("GET请求错误:返回状态码:{},返回信息:{}",getResponse.getStatus(),body);
            return ResultTool.fail(false,JSONObject.parseObject(body, clazz));
        }catch (HttpException e){
            log.error("GET请求失败:{}",e.getMessage());
            return ResultTool.fail();
        }
    }

    /**
     * post请求
     * @param url 路径
     * @param clazz 返回实体
     * @param <T> 自定义实体
     * @return T
     */
    public static <T> JsonResult<T> httpPost(String url,Map<String,Object> param, Class<T> clazz){
        try{
            HttpResponse getResponse=HttpRequest.post(url)
                    .headerMap(initHeaderMap,false)
                    .form(param)
                    .execute();
            String body=getResponse.body();
            if(getResponse.isOk()){
                return ResultTool.success(JSONObject.parseObject(body, clazz));
            }
            log.info("POST请求错误:返回状态码:{},返回信息:{}",getResponse.getStatus(),body);
            return ResultTool.fail(false,JSONObject.parseObject(body, clazz));
        }catch (HttpException e){
            log.error("POST请求失败:{}",e.getMessage());
            return ResultTool.fail();
        }
    }

    /**
     * post请求
     * @param url 路径
     * @param header 请求头
     * @param clazz 返回实体
     * @param <T> 自定义实体
     * @return T
     */
    public static <T> JsonResult<T> httpPost(String url,Map<String,Object> param,Map<String,String> header, Class<T> clazz){
        try{
            HttpResponse getResponse=HttpRequest.post(url)
                    .headerMap(MapUtil.isEmpty(header)?initHeaderMap:header,false)
                    .form(param)
                    .execute();
            String body=getResponse.body();
            if(getResponse.isOk()){
                return ResultTool.success(JSONObject.parseObject(body, clazz));
            }
            log.info("POST请求错误:返回状态码:{},返回信息:{}",getResponse.getStatus(),body);
            return ResultTool.fail(false,JSONObject.parseObject(body, clazz));
        }catch (HttpException e){
            log.error("POST请求失败:{}",e.getMessage());
            return ResultTool.fail();
        }
    }

    /**
     * post请求
     * @param url 路径
     * @param param 请求传参
     * @param clazz 返回实体
     * @param <T> 自定义实体
     * @return T
     */
    public static <T,E> JsonResult<T> httpPost(String url,E param, Class<T> clazz){
        try{
            HttpResponse getResponse=HttpRequest.post(url)
                    .headerMap(initHeaderMap,false)
                    .body(JSON.toJSONString(param))
                    .execute();
            String body=getResponse.body();
            if(getResponse.isOk()){
                return ResultTool.success(JSONObject.parseObject(body, clazz));
            }
            log.info("POST请求错误:返回状态码:{},返回信息:{}",getResponse.getStatus(),body);
            return ResultTool.fail(false,JSONObject.parseObject(body, clazz));
        }catch (HttpException e){
            log.error("POST请求失败:{}",e.getMessage());
            return ResultTool.fail();
        }
    }

    /**
     * post请求
     * @param url 路径
     * @param param 请求传参
     * @param header 请求头
     * @param clazz 返回实体
     * @param <T> 自定义实体
     * @return T
     */
    public static <T,E> JsonResult<T> httpPost(String url,E param,Map<String,String> header, Class<T> clazz){
        try{
            HttpResponse getResponse=HttpRequest.post(url)
                    .headerMap(MapUtil.isEmpty(header)?initHeaderMap:header,false)
                    .body(JSON.toJSONString(param))
                    .execute();
            String body=getResponse.body();
            if(getResponse.isOk()){
                return ResultTool.success(JSONObject.parseObject(body, clazz));
            }
            log.info("POST请求错误:返回状态码:{},返回信息:{}",getResponse.getStatus(),body);
            return ResultTool.fail(false,JSONObject.parseObject(body, clazz));
        }catch (HttpException e){
            log.error("POST请求失败:{}",e.getMessage());
            return ResultTool.fail();
        }
    }
}

完成收工!!!

相关文章:

  • 工厂模式加策略模式 -- 具体实现
  • 若依RuoYi-Cloud-Plus微服务版(完整版)前后端部署
  • 种子填充(Floodfill、泛滥填充、洪水填充) 算法c++模板
  • 固定表头、首列 —— uniapp、vue 项目
  • C#主流日志库深度对比:NLog、log4net与Serilog如何选择?
  • Qt 元对象系统
  • PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!
  • 《Mycat核心技术》第19章:基于MySQL实现读写分离
  • [数据结构]并查集--C++版本的实现代码
  • 【AI】神经网络|机器学习——图解Transformer(完整版)
  • Python数据分析之数据分析工具
  • 【C语言】--- 动态内存管理详解
  • 转自南京日报:天洑软件创新AI+仿真技术变制造为“智造
  • 网络安全反渗透 网络安全攻防渗透
  • 【性能测试】Jmeter详细操作-小白使用手册(2)
  • 常见排序算法深度评测:从原理到10万级数据实战
  • 【产品小白】Axure的简单操作
  • 【NexLM 开源系列】如何封装多个大模型 API 调用
  • QT显示网页控件QAxWidget、QWebEngineView及区别
  • Pytorch实现之利用CGAN鉴别真假图像
  • 便宜的网站设计/我想学做互联网怎么入手
  • 网页使用怎么做/杭州seo顾问
  • 网站简历导出/批量关键词排名查询工具
  • 工信部会抽查网站么/百度收录入口在哪里查询
  • 网站资讯建设/seo结算系统
  • 做h5小游戏的网站有哪些/5g网络优化工程师