SpringBoot项目使用HttpUtil工具类的总结

SpringBoot项目使用HttpUtil工具类的总结

废话不多说,先来工具类代码,只要是一个SpringBoot项目就可以使用的

import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

/**
 * http请求工具类
 *
 * @since 2020-03-25
 */
public class HttpUtil {
    /**
     * get请求
     *
     * @param url
     * @param params 请求参数
     * @return
     */
    public static String get(String url, MultiValueMap<String, String> params) {
        return get(url, params, null);
    }

    /**
     * get请求
     *
     * @param url
     * @param params  请求参数
     * @param headers 请求头
     * @return
     */
    public static String get(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
        return request(url, params, headers, HttpMethod.GET);
    }

    /**
     * post请求
     *
     * @param url
     * @param params 请求参数
     * @return
     */
    public static String post(String url, MultiValueMap<String, String> params) {
        return post(url, params, null);
    }

    /**
     * post请求
     *
     * @param url
     * @param params  请求参数
     * @param headers 请求头
     * @return
     */
    public static String post(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
        return request(url, params, headers, HttpMethod.POST);
    }

    /**
     * put请求
     *
     * @param url
     * @param params 请求参数
     * @return
     */
    public static String put(String url, MultiValueMap<String, String> params) {
        return put(url, params, null);
    }

    /**
     * put请求
     *
     * @param url
     * @param params  请求参数
     * @param headers 请求头
     * @return
     */
    public static String put(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
        return request(url, params, headers, HttpMethod.PUT);
    }

    /**
     * delete请求
     *
     * @param url
     * @param params 请求参数
     * @return
     */
    public static String delete(String url, MultiValueMap<String, String> params) {
        return delete(url, params, null);
    }

    /**
     * delete请求
     *
     * @param url
     * @param params  请求参数
     * @param headers 请求头
     * @return
     */
    public static String delete(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
        return request(url, params, headers, HttpMethod.DELETE);
    }

    /**
     * 表单请求
     *
     * @param url
     * @param params  请求参数
     * @param headers 请求头
     * @param method  请求方式
     * @return
     */
    public static String request(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers, HttpMethod method) {
        if (params == null) {
            params = new LinkedMultiValueMap<>();
        }
        return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED);
    }

    /**
     * http请求
     *
     * @param url
     * @param params    请求参数
     * @param headers   请求头
     * @param method    请求方式
     * @param mediaType 参数类型
     * @return
     */
    public static String request(String url, Object params, MultiValueMap<String, String> headers, HttpMethod method, MediaType mediaType) {
        if (url == null || url.trim().isEmpty()) {
            return null;
        }
        RestTemplate client = new RestTemplate();
        // header
        HttpHeaders httpHeaders = new HttpHeaders();
        if (headers != null) {
            httpHeaders.addAll(headers);
        }
        // 提交方式:表单、json
        httpHeaders.setContentType(mediaType);
        HttpEntity<Object> httpEntity = new HttpEntity(params, httpHeaders);
        ResponseEntity<String> response = client.exchange(url, method, httpEntity, String.class);
        return response.getBody();
    }
}

整个工具的核心都是在最后一个方法中

下面我来说说我在项目开发中遇到的问题:

需求

项目中,我需要用Java代码使用HTTP请求访问外部数据(一个接口,互联网的),最后得到一个Json 字符串

选择解决方式

HttpUtil工具类市面上很多写法,那么为什么我会选择这个工具类呢?是有原因的。

使用其他工具类存在的问题

我用了好多的HttpUtil工具类,都出现一个问题——那就是获取的接口返回Data为空,对,就是为空,一直为空(不知原因)。

存在问题的场景是:

在IDEA软件中,一切正常,但是打包部署项目,得到的数据一直都是空。
这就是最奇怪的现象。

那么我用了出问题的HttpUtil工具类都有哪些呢?这里我举个有代表的例子:
Hutool工具
这个链接中的工具类很经典,也很实用,但是仍然出了问题(我这问题也是奇葩)

解决方案

最后我使用了我上面写的工具类解决了这个问题(有知道原因的小伙伴可以下方评论哦)。

使用我贴出来的工具类的小问题

这个问题呢,就是中文乱码现象,其实也很好解决了,我写个简单的解决方案

// url:根据自己的情况填写
String json = HttpUtil.get(url, null);
json = new String(json.getBytes("ISO-8859-1"), "UTF-8");

上面的编码根据情况改写就可以

你可能感兴趣的:(SpringBoot,Java)