RestTemplateUtils网络请求工具类(建造者模式) 太过爱你忘了你带给我的痛 2023-06-19 02:59 23阅读 0赞 import com.google.common.base.Strings; import org.apache.http.entity.ContentType; import org.springframework.boot.configurationprocessor.json.JSONException; import org.springframework.boot.configurationprocessor.json.JSONObject; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.Objects; public final class RestTemplateUtils { private static RestTemplate restTemplate = new RestTemplate(); private HttpEntity httpEntity; /** * 构造函数已经私有化,只能通过create方法构造HttpContent * * @return HttpContent */ public static RestTemplateUtils create() { return new RestTemplateUtils(); } /** * get请求返回模板对象 * * @param url url * @param clazz T.class * @param <T> T * @return T */ public static <T> T getForObj(String url, Class<T> clazz) { return RestTemplateUtils.restTemplate.getForObject(url, clazz); } /** * get请求返回模板对象 * * @param url url * @param clazz t.class * @param <T> 模板 * @return T */ public <T> T postForObj(String url, Class<T> clazz) { this.build(); return restTemplate.postForObject(url, this.httpEntity, clazz); } /** * header */ private HttpHeaders httpHeaders; private String contentType; /** * body */ private HashMap<String, Object> params; private RestTemplateUtils() { } /** * 添加Header内容 * * @param headerName key * @param headerValue value * @return HttpContent */ public RestTemplateUtils addHeader(String headerName, String headerValue) { if (Objects.isNull(httpHeaders)) { httpHeaders = new HttpHeaders(); } httpHeaders.add(headerName, headerValue); return this; } /** * 设置请求体 * * @param key key * @param value value * @return HttpContent */ public RestTemplateUtils addBody(String key, Object value) { if (Objects.isNull(params)) { params = new HashMap<>(); } params.put(key, value); return this; } /** * 设置content-Type * * @param contentType string * @return HttpContent */ public RestTemplateUtils setContentType(String contentType) { if (Strings.isNullOrEmpty(contentType)) { throw new RuntimeException("content-Type can not be empty,please check your mediaType and try again ~"); } this.contentType = contentType; if (Objects.isNull(httpHeaders)) { httpHeaders = new HttpHeaders(); } httpHeaders.setContentType(MediaType.parseMediaType(contentType)); return this; } /** * 构建HttpEntity对象 * 不设置Content-Type默认application/json */ private void build() { if (Objects.isNull(this.params)) { throw new RuntimeException("body must be not empty,please add body and try again ~"); } if (Objects.isNull(contentType) || ContentType.APPLICATION_JSON.getMimeType().equals(contentType)) { this.setContentType(ContentType.APPLICATION_JSON.getMimeType()); JSONObject jsonObject = new JSONObject(); for (String s : params.keySet()) { try { jsonObject.put(s, params.get(s)); } catch (JSONException e) { e.printStackTrace(); } } String body = jsonObject.toString(); this.httpEntity = new HttpEntity<>(body, httpHeaders); } else if (ContentType.APPLICATION_FORM_URLENCODED.getMimeType().equals(contentType)) { MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>(); for (String s : params.keySet()) { formData.add(s, params.get(s)); } this.httpEntity = new HttpEntity<>(formData, httpHeaders); } else { throw new RuntimeException("sorry this tool only support content-Type include {application/json,multipart/form-data}"); } } } 使用教程: JSONObject json = RestTemplateUtils .create() //创建一个实例 .setContentType("xxx") //设置Content-Type,不设置默认为:application/json,多次设置,以最后一次为准 .addHeader("headerKey","headerVal") //添加header,可以多次添加 .addBody("bodyKey","bodyVal") //添加body,可以多次添加 .postForObj("url",JSONObject.class); //发送post请求
相关 RestTemplateUtils网络请求工具类(建造者模式) import com.google.common.base.Strings; import org.apache.http.entity.ContentType 太过爱你忘了你带给我的痛/ 2023年06月19日 02:59/ 0 赞/ 24 阅读
相关 建造者模式 定义 将一个复杂对象的构造与它的表示分离,是的同样的构建过程可以创建不同的表示。 类型:创建型 建造者模式与工厂模式有些类似: 建造者更注重:方法的调用顺序,关心创 「爱情、让人受尽委屈。」/ 2022年02月15日 19:25/ 0 赞/ 282 阅读
相关 建造者模式 [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] 1、产品类 package com.hhdys r囧r小猫/ 2022年01月14日 22:37/ 0 赞/ 248 阅读
相关 建造者模式 建造者模式,又称为生成器模式,是一种较为复杂、使用频率不高的创建型模式。它为客户端返回的不是一个简单的产品,而是有多个部件组成的复杂产品。以手机为例,建造者模式返回的是一个完整 谁践踏了优雅/ 2021年12月10日 18:29/ 0 赞/ 249 阅读
相关 建造者模式 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 柔光的暖阳◎/ 2021年09月29日 16:04/ 0 赞/ 324 阅读
相关 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Buil 向右看齐/ 2021年09月17日 01:24/ 0 赞/ 366 阅读
相关 建造者模式 4.建造者模式 ![70][] class Customer { static void Main(string[] a 女爷i/ 2021年09月16日 23:52/ 0 赞/ 370 阅读
相关 建造者模式 建造者模式 1. 简介 2. 建造者模式介绍 2.1 定义 2.2 建造者模式的优点 2.3 建造者模式的缺点 ﹏ヽ暗。殇╰゛Y/ 2021年08月30日 22:18/ 0 赞/ 506 阅读
相关 建造者模式 一 点睛 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naG 怼烎@/ 2021年07月24日 18:01/ 0 赞/ 425 阅读
相关 建造者模式 造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Bu... 小灰灰/ 2020年06月13日 05:36/ 0 赞/ 749 阅读
还没有评论,来说两句吧...