add method

This commit is contained in:
Looly 2021-09-13 11:35:57 +08:00
parent d3f946dd33
commit 5717fb52c5
3 changed files with 99 additions and 47 deletions

View File

@ -3,10 +3,11 @@
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.7.13 (2021-09-11) # 5.7.13 (2021-09-13)
### 🐣新特性 ### 🐣新特性
* 【core 】 CsvReadConfig增加trimField选项issue#I49M0C@Gitee * 【core 】 CsvReadConfig增加trimField选项issue#I49M0C@Gitee
* 【http 】 HttpBase增加clearHeaders方法issue#I49P23@Gitee
* *
### 🐞Bug修复 ### 🐞Bug修复
* 【core 】 修复FuncKey函数无效问题 * 【core 】 修复FuncKey函数无效问题

View File

@ -16,13 +16,14 @@ import java.util.Map.Entry;
* 所有Http请求将共用此全局头部信息除非在{@link HttpRequest}中自定义头部信息覆盖之 * 所有Http请求将共用此全局头部信息除非在{@link HttpRequest}中自定义头部信息覆盖之
* *
* @author looly * @author looly
*
*/ */
public enum GlobalHeaders { public enum GlobalHeaders {
INSTANCE; INSTANCE;
/** 存储头信息 */ /**
protected Map<String, List<String>> headers = new HashMap<>(); * 存储头信息
*/
Map<String, List<String>> headers = new HashMap<>();
/** /**
* 构造 * 构造
@ -56,6 +57,7 @@ public enum GlobalHeaders {
} }
// ---------------------------------------------------------------- Headers start // ---------------------------------------------------------------- Headers start
/** /**
* 根据name获取头信息 * 根据name获取头信息
* *
@ -102,8 +104,8 @@ public enum GlobalHeaders {
* 设置一个header<br> * 设置一个header<br>
* 如果覆盖模式则替换之前的值否则加入到值列表中 * 如果覆盖模式则替换之前的值否则加入到值列表中
* *
* @param name Header名 * @param name Header名
* @param value Header值 * @param value Header值
* @param isOverride 是否覆盖已有值 * @param isOverride 是否覆盖已有值
* @return this * @return this
*/ */
@ -125,8 +127,8 @@ public enum GlobalHeaders {
* 设置一个header<br> * 设置一个header<br>
* 如果覆盖模式则替换之前的值否则加入到值列表中 * 如果覆盖模式则替换之前的值否则加入到值列表中
* *
* @param name Header名 * @param name Header名
* @param value Header值 * @param value Header值
* @param isOverride 是否覆盖已有值 * @param isOverride 是否覆盖已有值
* @return this * @return this
*/ */
@ -138,7 +140,7 @@ public enum GlobalHeaders {
* 设置一个header<br> * 设置一个header<br>
* 覆盖模式则替换之前的值 * 覆盖模式则替换之前的值
* *
* @param name Header名 * @param name Header名
* @param value Header值 * @param value Header值
* @return this * @return this
*/ */
@ -150,7 +152,7 @@ public enum GlobalHeaders {
* 设置一个header<br> * 设置一个header<br>
* 覆盖模式则替换之前的值 * 覆盖模式则替换之前的值
* *
* @param name Header名 * @param name Header名
* @param value Header值 * @param value Header值
* @return this * @return this
*/ */
@ -211,6 +213,17 @@ public enum GlobalHeaders {
public Map<String, List<String>> headers() { public Map<String, List<String>> headers() {
return Collections.unmodifiableMap(headers); return Collections.unmodifiableMap(headers);
} }
/**
* 清除所有头信息包括全局头信息
*
* @return this
* @since 5.7.13
*/
public GlobalHeaders clearHeaders() {
this.headers.clear();
return this;
}
// ---------------------------------------------------------------- Headers end // ---------------------------------------------------------------- Headers end
} }

View File

@ -17,27 +17,41 @@ import java.util.Map.Entry;
/** /**
* http基类 * http基类
* @author Looly *
* @param <T> 子类类型方便链式编程 * @param <T> 子类类型方便链式编程
* @author Looly
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public abstract class HttpBase<T> { public abstract class HttpBase<T> {
/**HTTP/1.0*/ /**
* HTTP/1.0
*/
public static final String HTTP_1_0 = "HTTP/1.0"; public static final String HTTP_1_0 = "HTTP/1.0";
/**HTTP/1.1*/ /**
* HTTP/1.1
*/
public static final String HTTP_1_1 = "HTTP/1.1"; public static final String HTTP_1_1 = "HTTP/1.1";
/**存储头信息*/ /**
* 存储头信息
*/
protected Map<String, List<String>> headers = new HashMap<>(); protected Map<String, List<String>> headers = new HashMap<>();
/**编码*/ /**
* 编码
*/
protected Charset charset = CharsetUtil.CHARSET_UTF_8; protected Charset charset = CharsetUtil.CHARSET_UTF_8;
/**http版本*/ /**
* http版本
*/
protected String httpVersion = HTTP_1_1; protected String httpVersion = HTTP_1_1;
/**存储主体*/ /**
* 存储主体
*/
protected byte[] bodyBytes; protected byte[] bodyBytes;
// ---------------------------------------------------------------- Headers start // ---------------------------------------------------------------- Headers start
/** /**
* 根据name获取头信息<br> * 根据name获取头信息<br>
* 根据RFC2616规范header的name不区分大小写 * 根据RFC2616规范header的name不区分大小写
@ -47,7 +61,7 @@ public abstract class HttpBase<T> {
*/ */
public String header(String name) { public String header(String name) {
final List<String> values = headerList(name); final List<String> values = headerList(name);
if(CollectionUtil.isEmpty(values)) { if (CollectionUtil.isEmpty(values)) {
return null; return null;
} }
return values.get(0); return values.get(0);
@ -55,26 +69,28 @@ public abstract class HttpBase<T> {
/** /**
* 根据name获取头信息列表 * 根据name获取头信息列表
*
* @param name Header名 * @param name Header名
* @return Header值 * @return Header值
* @since 3.1.1 * @since 3.1.1
*/ */
public List<String> headerList(String name) { public List<String> headerList(String name) {
if(StrUtil.isBlank(name)) { if (StrUtil.isBlank(name)) {
return null; return null;
} }
final CaseInsensitiveMap<String,List<String>> headersIgnoreCase = new CaseInsensitiveMap<>(this.headers); final CaseInsensitiveMap<String, List<String>> headersIgnoreCase = new CaseInsensitiveMap<>(this.headers);
return headersIgnoreCase.get(name.trim()); return headersIgnoreCase.get(name.trim());
} }
/** /**
* 根据name获取头信息 * 根据name获取头信息
*
* @param name Header名 * @param name Header名
* @return Header值 * @return Header值
*/ */
public String header(Header name) { public String header(Header name) {
if(null == name) { if (null == name) {
return null; return null;
} }
return header(name.toString()); return header(name.toString());
@ -83,19 +99,20 @@ public abstract class HttpBase<T> {
/** /**
* 设置一个header<br> * 设置一个header<br>
* 如果覆盖模式则替换之前的值否则加入到值列表中 * 如果覆盖模式则替换之前的值否则加入到值列表中
* @param name Header名 *
* @param value Header值 * @param name Header名
* @param value Header值
* @param isOverride 是否覆盖已有值 * @param isOverride 是否覆盖已有值
* @return T 本身 * @return T 本身
*/ */
public T header(String name, String value, boolean isOverride) { public T header(String name, String value, boolean isOverride) {
if(null != name && null != value){ if (null != name && null != value) {
final List<String> values = headers.get(name.trim()); final List<String> values = headers.get(name.trim());
if(isOverride || CollectionUtil.isEmpty(values)) { if (isOverride || CollectionUtil.isEmpty(values)) {
final ArrayList<String> valueList = new ArrayList<>(); final ArrayList<String> valueList = new ArrayList<>();
valueList.add(value); valueList.add(value);
headers.put(name.trim(), valueList); headers.put(name.trim(), valueList);
}else { } else {
values.add(value.trim()); values.add(value.trim());
} }
} }
@ -105,8 +122,9 @@ public abstract class HttpBase<T> {
/** /**
* 设置一个header<br> * 设置一个header<br>
* 如果覆盖模式则替换之前的值否则加入到值列表中 * 如果覆盖模式则替换之前的值否则加入到值列表中
* @param name Header名 *
* @param value Header值 * @param name Header名
* @param value Header值
* @param isOverride 是否覆盖已有值 * @param isOverride 是否覆盖已有值
* @return T 本身 * @return T 本身
*/ */
@ -117,7 +135,8 @@ public abstract class HttpBase<T> {
/** /**
* 设置一个header<br> * 设置一个header<br>
* 覆盖模式则替换之前的值 * 覆盖模式则替换之前的值
* @param name Header名 *
* @param name Header名
* @param value Header值 * @param value Header值
* @return T 本身 * @return T 本身
*/ */
@ -128,7 +147,8 @@ public abstract class HttpBase<T> {
/** /**
* 设置一个header<br> * 设置一个header<br>
* 覆盖模式则替换之前的值 * 覆盖模式则替换之前的值
* @param name Header名 *
* @param name Header名
* @param value Header值 * @param value Header值
* @return T 本身 * @return T 本身
*/ */
@ -139,20 +159,20 @@ public abstract class HttpBase<T> {
/** /**
* 设置请求头 * 设置请求头
* *
* @param headers 请求头 * @param headers 请求头
* @param isOverride 是否覆盖已有头信息 * @param isOverride 是否覆盖已有头信息
* @return this * @return this
* @since 4.6.3 * @since 4.6.3
*/ */
public T headerMap(Map<String, String> headers, boolean isOverride) { public T headerMap(Map<String, String> headers, boolean isOverride) {
if(MapUtil.isEmpty(headers)) { if (MapUtil.isEmpty(headers)) {
return (T)this; return (T) this;
} }
for (Entry<String, String> entry : headers.entrySet()) { for (Entry<String, String> entry : headers.entrySet()) {
this.header(entry.getKey(), StrUtil.nullToEmpty(entry.getValue()), isOverride); this.header(entry.getKey(), StrUtil.nullToEmpty(entry.getValue()), isOverride);
} }
return (T)this; return (T) this;
} }
/** /**
@ -169,14 +189,14 @@ public abstract class HttpBase<T> {
/** /**
* 设置请求头 * 设置请求头
* *
* @param headers 请求头 * @param headers 请求头
* @param isOverride 是否覆盖已有头信息 * @param isOverride 是否覆盖已有头信息
* @return this * @return this
* @since 4.0.8 * @since 4.0.8
*/ */
public T header(Map<String, List<String>> headers, boolean isOverride) { public T header(Map<String, List<String>> headers, boolean isOverride) {
if(MapUtil.isEmpty(headers)) { if (MapUtil.isEmpty(headers)) {
return (T)this; return (T) this;
} }
String name; String name;
@ -186,7 +206,7 @@ public abstract class HttpBase<T> {
this.header(name, StrUtil.nullToEmpty(value), isOverride); this.header(name, StrUtil.nullToEmpty(value), isOverride);
} }
} }
return (T)this; return (T) this;
} }
/** /**
@ -198,30 +218,32 @@ public abstract class HttpBase<T> {
* @since 4.0.3 * @since 4.0.3
*/ */
public T addHeaders(Map<String, String> headers) { public T addHeaders(Map<String, String> headers) {
if(MapUtil.isEmpty(headers)) { if (MapUtil.isEmpty(headers)) {
return (T)this; return (T) this;
} }
for (Entry<String,String> entry : headers.entrySet()) { for (Entry<String, String> entry : headers.entrySet()) {
this.header(entry.getKey(), StrUtil.nullToEmpty(entry.getValue()), false); this.header(entry.getKey(), StrUtil.nullToEmpty(entry.getValue()), false);
} }
return (T)this; return (T) this;
} }
/** /**
* 移除一个头信息 * 移除一个头信息
*
* @param name Header名 * @param name Header名
* @return this * @return this
*/ */
public T removeHeader(String name) { public T removeHeader(String name) {
if(name != null) { if (name != null) {
headers.remove(name.trim()); headers.remove(name.trim());
} }
return (T)this; return (T) this;
} }
/** /**
* 移除一个头信息 * 移除一个头信息
*
* @param name Header名 * @param name Header名
* @return this * @return this
*/ */
@ -231,15 +253,28 @@ public abstract class HttpBase<T> {
/** /**
* 获取headers * 获取headers
*
* @return Headers Map * @return Headers Map
*/ */
public Map<String, List<String>> headers() { public Map<String, List<String>> headers() {
return Collections.unmodifiableMap(headers); return Collections.unmodifiableMap(headers);
} }
/**
* 清除所有头信息包括全局头信息
*
* @return this
* @since 5.7.13
*/
public T clearHeaders() {
this.headers.clear();
return (T) this;
}
// ---------------------------------------------------------------- Headers end // ---------------------------------------------------------------- Headers end
/** /**
* 返回http版本 * 返回http版本
*
* @return String * @return String
*/ */
public String httpVersion() { public String httpVersion() {
@ -259,6 +294,7 @@ public abstract class HttpBase<T> {
/** /**
* 返回字符集 * 返回字符集
*
* @return 字符集 * @return 字符集
*/ */
public String charset() { public String charset() {
@ -267,12 +303,13 @@ public abstract class HttpBase<T> {
/** /**
* 设置字符集 * 设置字符集
*
* @param charset 字符集 * @param charset 字符集
* @return T 自己 * @return T 自己
* @see CharsetUtil * @see CharsetUtil
*/ */
public T charset(String charset) { public T charset(String charset) {
if(StrUtil.isNotBlank(charset)){ if (StrUtil.isNotBlank(charset)) {
charset(Charset.forName(charset)); charset(Charset.forName(charset));
} }
return (T) this; return (T) this;
@ -280,12 +317,13 @@ public abstract class HttpBase<T> {
/** /**
* 设置字符集 * 设置字符集
*
* @param charset 字符集 * @param charset 字符集
* @return T 自己 * @return T 自己
* @see CharsetUtil * @see CharsetUtil
*/ */
public T charset(Charset charset) { public T charset(Charset charset) {
if(null != charset){ if (null != charset) {
this.charset = charset; this.charset = charset;
} }
return (T) this; return (T) this;
@ -297,7 +335,7 @@ public abstract class HttpBase<T> {
sb.append("Request Headers: ").append(StrUtil.CRLF); sb.append("Request Headers: ").append(StrUtil.CRLF);
for (Entry<String, List<String>> entry : this.headers.entrySet()) { for (Entry<String, List<String>> entry : this.headers.entrySet()) {
sb.append(" ").append( sb.append(" ").append(
entry.getKey()).append(": ").append(CollUtil.join(entry.getValue(), ",")) entry.getKey()).append(": ").append(CollUtil.join(entry.getValue(), ","))
.append(StrUtil.CRLF); .append(StrUtil.CRLF);
} }