mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix bugs
This commit is contained in:
parent
8b94fa0c5d
commit
8e70a2aca7
@ -7,7 +7,10 @@
|
|||||||
|
|
||||||
### 新特性
|
### 新特性
|
||||||
* 【core】 ImgUtil.rotate支持负数(issue#543@Github)
|
* 【core】 ImgUtil.rotate支持负数(issue#543@Github)
|
||||||
|
* 【http】 body方法传null跳过而非报错(issue#I12AP2@Github)
|
||||||
|
* 【core】 TimeInterval增加intervalPretty方法(issue#I12A6T@Github)
|
||||||
### Bug修复
|
### Bug修复
|
||||||
|
* 【core】 修复DateUtil.offset导致的时区错误问题(issue#I1294O@Github)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -19,16 +19,21 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
* 包装java.util.Date
|
* 包装java.util.Date
|
||||||
*
|
*
|
||||||
* @author xiaoleilu
|
* @author xiaoleilu
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class DateTime extends Date {
|
public class DateTime extends Date {
|
||||||
private static final long serialVersionUID = -5395712593979185936L;
|
private static final long serialVersionUID = -5395712593979185936L;
|
||||||
|
|
||||||
/** 是否可变对象 */
|
/**
|
||||||
|
* 是否可变对象
|
||||||
|
*/
|
||||||
private boolean mutable = true;
|
private boolean mutable = true;
|
||||||
/** 一周的第一天,默认是周一, 在设置或获得 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段时,Calendar 必须确定一个月或一年的第一个星期,以此作为参考点。 */
|
/**
|
||||||
|
* 一周的第一天,默认是周一, 在设置或获得 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段时,Calendar 必须确定一个月或一年的第一个星期,以此作为参考点。
|
||||||
|
*/
|
||||||
private Week firstDayOfWeek = Week.MONDAY;
|
private Week firstDayOfWeek = Week.MONDAY;
|
||||||
/** 时区 */
|
/**
|
||||||
|
* 时区
|
||||||
|
*/
|
||||||
private TimeZone timeZone;
|
private TimeZone timeZone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -68,10 +73,10 @@ public class DateTime extends Date {
|
|||||||
/**
|
/**
|
||||||
* 构造
|
* 构造
|
||||||
*
|
*
|
||||||
* @see DatePattern
|
|
||||||
* @param dateStr Date字符串
|
* @param dateStr Date字符串
|
||||||
* @param format 格式
|
* @param format 格式
|
||||||
* @return {@link DateTime}
|
* @return {@link DateTime}
|
||||||
|
* @see DatePattern
|
||||||
*/
|
*/
|
||||||
public static DateTime of(String dateStr, String format) {
|
public static DateTime of(String dateStr, String format) {
|
||||||
return new DateTime(dateStr, format);
|
return new DateTime(dateStr, format);
|
||||||
@ -87,9 +92,9 @@ public class DateTime extends Date {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------- Constructor start
|
// -------------------------------------------------------------------- Constructor start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前时间
|
* 当前时间
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public DateTime() {
|
public DateTime() {
|
||||||
this(TimeZone.getDefault());
|
this(TimeZone.getDefault());
|
||||||
@ -111,7 +116,10 @@ public class DateTime extends Date {
|
|||||||
* @param date 日期
|
* @param date 日期
|
||||||
*/
|
*/
|
||||||
public DateTime(Date date) {
|
public DateTime(Date date) {
|
||||||
this(date.getTime(), TimeZone.getDefault());
|
this(
|
||||||
|
date.getTime(),//
|
||||||
|
(date instanceof DateTime) ? ((DateTime) date).timeZone : TimeZone.getDefault()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -131,7 +139,7 @@ public class DateTime extends Date {
|
|||||||
* @param calendar {@link Calendar}
|
* @param calendar {@link Calendar}
|
||||||
*/
|
*/
|
||||||
public DateTime(Calendar calendar) {
|
public DateTime(Calendar calendar) {
|
||||||
this(calendar.getTime(), (TimeZone) null);
|
this(calendar.getTime(), calendar.getTimeZone());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -141,7 +149,7 @@ public class DateTime extends Date {
|
|||||||
* @since 4.1.2
|
* @since 4.1.2
|
||||||
*/
|
*/
|
||||||
public DateTime(long timeMillis) {
|
public DateTime(long timeMillis) {
|
||||||
this(timeMillis, (TimeZone) null);
|
this(timeMillis, TimeZone.getDefault());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -161,9 +169,9 @@ public class DateTime extends Date {
|
|||||||
/**
|
/**
|
||||||
* 构造
|
* 构造
|
||||||
*
|
*
|
||||||
* @see DatePattern
|
|
||||||
* @param dateStr Date字符串
|
* @param dateStr Date字符串
|
||||||
* @param format 格式
|
* @param format 格式
|
||||||
|
* @see DatePattern
|
||||||
*/
|
*/
|
||||||
public DateTime(String dateStr, String format) {
|
public DateTime(String dateStr, String format) {
|
||||||
this(dateStr, new SimpleDateFormat(format));
|
this(dateStr, new SimpleDateFormat(format));
|
||||||
@ -172,9 +180,9 @@ public class DateTime extends Date {
|
|||||||
/**
|
/**
|
||||||
* 构造
|
* 构造
|
||||||
*
|
*
|
||||||
* @see DatePattern
|
|
||||||
* @param dateStr Date字符串
|
* @param dateStr Date字符串
|
||||||
* @param dateFormat 格式化器 {@link SimpleDateFormat}
|
* @param dateFormat 格式化器 {@link SimpleDateFormat}
|
||||||
|
* @see DatePattern
|
||||||
*/
|
*/
|
||||||
public DateTime(String dateStr, DateFormat dateFormat) {
|
public DateTime(String dateStr, DateFormat dateFormat) {
|
||||||
this(parse(dateStr, dateFormat), dateFormat.getTimeZone());
|
this(parse(dateStr, dateFormat), dateFormat.getTimeZone());
|
||||||
@ -183,9 +191,9 @@ public class DateTime extends Date {
|
|||||||
/**
|
/**
|
||||||
* 构造
|
* 构造
|
||||||
*
|
*
|
||||||
* @see DatePattern
|
|
||||||
* @param dateStr Date字符串
|
* @param dateStr Date字符串
|
||||||
* @param dateParser 格式化器 {@link DateParser},可以使用 {@link FastDateFormat}
|
* @param dateParser 格式化器 {@link DateParser},可以使用 {@link FastDateFormat}
|
||||||
|
* @see DatePattern
|
||||||
*/
|
*/
|
||||||
public DateTime(String dateStr, DateParser dateParser) {
|
public DateTime(String dateStr, DateParser dateParser) {
|
||||||
this(parse(dateStr, dateParser), dateParser.getTimeZone());
|
this(parse(dateStr, dateParser), dateParser.getTimeZone());
|
||||||
@ -194,6 +202,7 @@ public class DateTime extends Date {
|
|||||||
// -------------------------------------------------------------------- Constructor end
|
// -------------------------------------------------------------------- Constructor end
|
||||||
|
|
||||||
// -------------------------------------------------------------------- offset start
|
// -------------------------------------------------------------------- offset start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 调整日期和时间<br>
|
* 调整日期和时间<br>
|
||||||
* 如果此对象为可变对象,返回自身,否则返回新对象,设置是否可变对象见{@link #setMutable(boolean)}
|
* 如果此对象为可变对象,返回自身,否则返回新对象,设置是否可变对象见{@link #setMutable(boolean)}
|
||||||
@ -229,6 +238,7 @@ public class DateTime extends Date {
|
|||||||
// -------------------------------------------------------------------- offset end
|
// -------------------------------------------------------------------- offset end
|
||||||
|
|
||||||
// -------------------------------------------------------------------- Part of Date start
|
// -------------------------------------------------------------------- Part of Date start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得日期的某个部分<br>
|
* 获得日期的某个部分<br>
|
||||||
* 例如获得年的部分,则使用 getField(DatePart.YEAR)
|
* 例如获得年的部分,则使用 getField(DatePart.YEAR)
|
||||||
@ -506,8 +516,8 @@ public class DateTime extends Date {
|
|||||||
/**
|
/**
|
||||||
* 是否闰年
|
* 是否闰年
|
||||||
*
|
*
|
||||||
* @see DateUtil#isLeapYear(int)
|
|
||||||
* @return 是否闰年
|
* @return 是否闰年
|
||||||
|
* @see DateUtil#isLeapYear(int)
|
||||||
*/
|
*/
|
||||||
public boolean isLeapYear() {
|
public boolean isLeapYear() {
|
||||||
return DateUtil.isLeapYear(year());
|
return DateUtil.isLeapYear(year());
|
||||||
@ -764,6 +774,7 @@ public class DateTime extends Date {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------- toString start
|
// -------------------------------------------------------------------- toString start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 转为"yyyy-MM-dd yyyy-MM-dd HH:mm:ss " 格式字符串<br>
|
* 转为"yyyy-MM-dd yyyy-MM-dd HH:mm:ss " 格式字符串<br>
|
||||||
* 如果时区被设置,会转换为其时区对应的时间,否则转换为当前地点对应的时区
|
* 如果时区被设置,会转换为其时区对应的时间,否则转换为当前地点对应的时区
|
||||||
|
@ -1325,7 +1325,7 @@ public class DateUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定日期偏移指定时间后的时间
|
* 获取指定日期偏移指定时间后的时间,生成的偏移日期不影响原日期
|
||||||
*
|
*
|
||||||
* @param date 基准日期
|
* @param date 基准日期
|
||||||
* @param dateField 偏移的粒度大小(小时、天、月等){@link DateField}
|
* @param dateField 偏移的粒度大小(小时、天、月等){@link DateField}
|
||||||
@ -1333,10 +1333,7 @@ public class DateUtil {
|
|||||||
* @return 偏移后的日期
|
* @return 偏移后的日期
|
||||||
*/
|
*/
|
||||||
public static DateTime offset(Date date, DateField dateField, int offset) {
|
public static DateTime offset(Date date, DateField dateField, int offset) {
|
||||||
Calendar cal = Calendar.getInstance();
|
return dateNew(date).offset(dateField, offset);
|
||||||
cal.setTime(date);
|
|
||||||
cal.add(dateField.getValue(), offset);
|
|
||||||
return new DateTime(cal.getTime());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -7,7 +7,6 @@ import java.io.Serializable;
|
|||||||
* 计算某个过程花费的时间,精确到毫秒
|
* 计算某个过程花费的时间,精确到毫秒
|
||||||
*
|
*
|
||||||
* @author Looly
|
* @author Looly
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class TimeInterval implements Serializable {
|
public class TimeInterval implements Serializable {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -44,6 +43,7 @@ public class TimeInterval implements Serializable{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 重新开始计算时间(重置开始时间)
|
* 重新开始计算时间(重置开始时间)
|
||||||
|
*
|
||||||
* @return this
|
* @return this
|
||||||
* @since 3.0.1
|
* @since 3.0.1
|
||||||
*/
|
*/
|
||||||
@ -53,17 +53,30 @@ public class TimeInterval implements Serializable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------- Interval
|
//----------------------------------------------------------- Interval
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从开始到当前的间隔时间(毫秒数)<br>
|
* 从开始到当前的间隔时间(毫秒数)<br>
|
||||||
* 如果使用纳秒计时,返回纳秒差,否则返回毫秒差
|
* 如果使用纳秒计时,返回纳秒差,否则返回毫秒差
|
||||||
|
*
|
||||||
* @return 从开始到当前的间隔时间(毫秒数)
|
* @return 从开始到当前的间隔时间(毫秒数)
|
||||||
*/
|
*/
|
||||||
public long interval() {
|
public long interval() {
|
||||||
return DateUtil.current(isNano) - time;
|
return DateUtil.current(isNano) - time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从开始到当前的间隔时间(毫秒数),返回XX天XX小时XX分XX秒XX毫秒
|
||||||
|
*
|
||||||
|
* @return 从开始到当前的间隔时间(毫秒数)
|
||||||
|
* @since 4.6.7
|
||||||
|
*/
|
||||||
|
public String intervalPretty() {
|
||||||
|
return DateUtil.formatBetween(intervalMs());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从开始到当前的间隔时间(毫秒数)
|
* 从开始到当前的间隔时间(毫秒数)
|
||||||
|
*
|
||||||
* @return 从开始到当前的间隔时间(毫秒数)
|
* @return 从开始到当前的间隔时间(毫秒数)
|
||||||
*/
|
*/
|
||||||
public long intervalMs() {
|
public long intervalMs() {
|
||||||
@ -72,6 +85,7 @@ public class TimeInterval implements Serializable{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 从开始到当前的间隔秒数,取绝对值
|
* 从开始到当前的间隔秒数,取绝对值
|
||||||
|
*
|
||||||
* @return 从开始到当前的间隔秒数,取绝对值
|
* @return 从开始到当前的间隔秒数,取绝对值
|
||||||
*/
|
*/
|
||||||
public long intervalSecond() {
|
public long intervalSecond() {
|
||||||
@ -80,6 +94,7 @@ public class TimeInterval implements Serializable{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 从开始到当前的间隔分钟数,取绝对值
|
* 从开始到当前的间隔分钟数,取绝对值
|
||||||
|
*
|
||||||
* @return 从开始到当前的间隔分钟数,取绝对值
|
* @return 从开始到当前的间隔分钟数,取绝对值
|
||||||
*/
|
*/
|
||||||
public long intervalMinute() {
|
public long intervalMinute() {
|
||||||
@ -88,6 +103,7 @@ public class TimeInterval implements Serializable{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 从开始到当前的间隔小时数,取绝对值
|
* 从开始到当前的间隔小时数,取绝对值
|
||||||
|
*
|
||||||
* @return 从开始到当前的间隔小时数,取绝对值
|
* @return 从开始到当前的间隔小时数,取绝对值
|
||||||
*/
|
*/
|
||||||
public long intervalHour() {
|
public long intervalHour() {
|
||||||
@ -96,6 +112,7 @@ public class TimeInterval implements Serializable{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 从开始到当前的间隔天数,取绝对值
|
* 从开始到当前的间隔天数,取绝对值
|
||||||
|
*
|
||||||
* @return 从开始到当前的间隔天数,取绝对值
|
* @return 从开始到当前的间隔天数,取绝对值
|
||||||
*/
|
*/
|
||||||
public long intervalDay() {
|
public long intervalDay() {
|
||||||
@ -104,6 +121,7 @@ public class TimeInterval implements Serializable{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 从开始到当前的间隔周数,取绝对值
|
* 从开始到当前的间隔周数,取绝对值
|
||||||
|
*
|
||||||
* @return 从开始到当前的间隔周数,取绝对值
|
* @return 从开始到当前的间隔周数,取绝对值
|
||||||
*/
|
*/
|
||||||
public long intervalWeek() {
|
public long intervalWeek() {
|
||||||
|
@ -1,20 +1,13 @@
|
|||||||
package cn.hutool.core.date;
|
package cn.hutool.core.date;
|
||||||
|
|
||||||
import java.text.ParseException;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.NoSuchElementException;
|
|
||||||
import java.util.TimeZone;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.BetweenFormater.Level;
|
import cn.hutool.core.date.BetweenFormater.Level;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 时间工具单元测试<br>
|
* 时间工具单元测试<br>
|
||||||
@ -25,7 +18,6 @@ import cn.hutool.core.date.BetweenFormater.Level;
|
|||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author Looly
|
* @author Looly
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class DateUtilTest {
|
public class DateUtilTest {
|
||||||
|
|
||||||
@ -289,13 +281,13 @@ public class DateUtilTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseTest4() throws ParseException {
|
public void parseTest4() {
|
||||||
String ymd = DateUtil.parse("2019-3-21 12:20:15", "yyyy-MM-dd").toString(DatePattern.PURE_DATE_PATTERN);
|
String ymd = DateUtil.parse("2019-3-21 12:20:15", "yyyy-MM-dd").toString(DatePattern.PURE_DATE_PATTERN);
|
||||||
Assert.assertEquals("20190321", ymd);
|
Assert.assertEquals("20190321", ymd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseTest5() throws ParseException {
|
public void parseTest5() {
|
||||||
// 测试时间解析
|
// 测试时间解析
|
||||||
String time = DateUtil.parse("22:12:12").toString(DatePattern.NORM_TIME_FORMAT);
|
String time = DateUtil.parse("22:12:12").toString(DatePattern.NORM_TIME_FORMAT);
|
||||||
Assert.assertEquals("22:12:12", time);
|
Assert.assertEquals("22:12:12", time);
|
||||||
@ -321,21 +313,32 @@ public class DateUtilTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseTest6() throws ParseException {
|
public void parseTest6() {
|
||||||
String str = "Tue Jun 4 16:25:15 +0800 2019";
|
String str = "Tue Jun 4 16:25:15 +0800 2019";
|
||||||
DateTime dateTime = DateUtil.parse(str);
|
DateTime dateTime = DateUtil.parse(str);
|
||||||
Assert.assertEquals("2019-06-04 16:25:15", dateTime.toString());
|
Assert.assertEquals("2019-06-04 16:25:15", dateTime.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseTest7() throws ParseException {
|
public void parseTest7() {
|
||||||
String str = "2019-06-01T19:45:43.000 +0800";
|
String str = "2019-06-01T19:45:43.000 +0800";
|
||||||
DateTime dateTime = DateUtil.parse(str, "yyyy-MM-dd'T'HH:mm:ss.SSS Z");
|
DateTime dateTime = DateUtil.parse(str, "yyyy-MM-dd'T'HH:mm:ss.SSS Z");
|
||||||
Assert.assertEquals("2019-06-01 19:45:43", dateTime.toString());
|
Assert.assertEquals("2019-06-01 19:45:43", dateTime.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseDateTest() throws ParseException {
|
public void parseAndOffsetTest() {
|
||||||
|
// 检查UTC时间偏移是否准确
|
||||||
|
String str = "2019-09-17T13:26:17.948Z";
|
||||||
|
DateTime dateTime = DateUtil.parse(str);
|
||||||
|
Assert.assertEquals("2019-09-17 13:26:17", dateTime.toString());
|
||||||
|
|
||||||
|
DateTime offset = DateUtil.offsetHour(dateTime, 8);
|
||||||
|
Assert.assertEquals("2019-09-17 21:26:17", offset.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseDateTest() {
|
||||||
String dateStr = "2018-4-10";
|
String dateStr = "2018-4-10";
|
||||||
Date date = DateUtil.parseDate(dateStr);
|
Date date = DateUtil.parseDate(dateStr);
|
||||||
String format = DateUtil.format(date, DatePattern.NORM_DATE_PATTERN);
|
String format = DateUtil.format(date, DatePattern.NORM_DATE_PATTERN);
|
||||||
@ -411,7 +414,7 @@ public class DateUtilTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseUTCTest() throws ParseException {
|
public void parseUTCTest() {
|
||||||
String dateStr1 = "2018-09-13T05:34:31Z";
|
String dateStr1 = "2018-09-13T05:34:31Z";
|
||||||
DateTime dt = DateUtil.parseUTC(dateStr1);
|
DateTime dt = DateUtil.parseUTC(dateStr1);
|
||||||
|
|
||||||
@ -471,7 +474,7 @@ public class DateUtilTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseJDkTest() throws ParseException {
|
public void parseJDkTest() {
|
||||||
String dateStr = "Thu May 16 17:57:18 GMT+08:00 2019";
|
String dateStr = "Thu May 16 17:57:18 GMT+08:00 2019";
|
||||||
DateTime time = DateUtil.parse(dateStr);
|
DateTime time = DateUtil.parse(dateStr);
|
||||||
Assert.assertEquals("2019-05-16 17:57:18", time.toString());
|
Assert.assertEquals("2019-05-16 17:57:18", time.toString());
|
||||||
@ -521,7 +524,7 @@ public class DateUtilTest {
|
|||||||
try {
|
try {
|
||||||
range.next();
|
range.next();
|
||||||
Assert.fail("已超过边界,下一个元素不应该存在!");
|
Assert.fail("已超过边界,下一个元素不应该存在!");
|
||||||
} catch (NoSuchElementException e) {
|
} catch (NoSuchElementException ignored) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测试多步进的情况
|
// 测试多步进的情况
|
||||||
@ -535,7 +538,7 @@ public class DateUtilTest {
|
|||||||
try {
|
try {
|
||||||
range.next();
|
range.next();
|
||||||
Assert.fail("不包含结束时间情况下,下一个元素不应该存在!");
|
Assert.fail("不包含结束时间情况下,下一个元素不应该存在!");
|
||||||
} catch (NoSuchElementException e) {
|
} catch (NoSuchElementException ignored) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,8 +69,8 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
* 获取Cookie管理器,用于自定义Cookie管理
|
* 获取Cookie管理器,用于自定义Cookie管理
|
||||||
*
|
*
|
||||||
* @return {@link CookieManager}
|
* @return {@link CookieManager}
|
||||||
* @since 4.1.0
|
|
||||||
* @see GlobalCookieManager#getCookieManager()
|
* @see GlobalCookieManager#getCookieManager()
|
||||||
|
* @since 4.1.0
|
||||||
*/
|
*/
|
||||||
public static CookieManager getCookieManager() {
|
public static CookieManager getCookieManager() {
|
||||||
return GlobalCookieManager.getCookieManager();
|
return GlobalCookieManager.getCookieManager();
|
||||||
@ -80,8 +80,8 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
* 自定义{@link CookieManager}
|
* 自定义{@link CookieManager}
|
||||||
*
|
*
|
||||||
* @param customCookieManager 自定义的{@link CookieManager}
|
* @param customCookieManager 自定义的{@link CookieManager}
|
||||||
* @since 4.5.14
|
|
||||||
* @see GlobalCookieManager#setCookieManager(CookieManager)
|
* @see GlobalCookieManager#setCookieManager(CookieManager)
|
||||||
|
* @since 4.5.14
|
||||||
*/
|
*/
|
||||||
public static void setCookieManager(CookieManager customCookieManager) {
|
public static void setCookieManager(CookieManager customCookieManager) {
|
||||||
GlobalCookieManager.setCookieManager(customCookieManager);
|
GlobalCookieManager.setCookieManager(customCookieManager);
|
||||||
@ -90,8 +90,8 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
/**
|
/**
|
||||||
* 关闭Cookie
|
* 关闭Cookie
|
||||||
*
|
*
|
||||||
* @since 4.1.9
|
|
||||||
* @see GlobalCookieManager#setCookieManager(CookieManager)
|
* @see GlobalCookieManager#setCookieManager(CookieManager)
|
||||||
|
* @since 4.1.9
|
||||||
*/
|
*/
|
||||||
public static void closeCookie() {
|
public static void closeCookie() {
|
||||||
GlobalCookieManager.setCookieManager(null);
|
GlobalCookieManager.setCookieManager(null);
|
||||||
@ -100,37 +100,67 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
private String url;
|
private String url;
|
||||||
private URLStreamHandler urlHandler;
|
private URLStreamHandler urlHandler;
|
||||||
private Method method = Method.GET;
|
private Method method = Method.GET;
|
||||||
/** 默认连接超时 */
|
/**
|
||||||
|
* 默认连接超时
|
||||||
|
*/
|
||||||
private int connectionTimeout = HttpGlobalConfig.timeout;
|
private int connectionTimeout = HttpGlobalConfig.timeout;
|
||||||
/** 默认读取超时 */
|
/**
|
||||||
|
* 默认读取超时
|
||||||
|
*/
|
||||||
private int readTimeout = HttpGlobalConfig.timeout;
|
private int readTimeout = HttpGlobalConfig.timeout;
|
||||||
/** 存储表单数据 */
|
/**
|
||||||
|
* 存储表单数据
|
||||||
|
*/
|
||||||
private Map<String, Object> form;
|
private Map<String, Object> form;
|
||||||
/** 文件表单对象,用于文件上传 */
|
/**
|
||||||
|
* 文件表单对象,用于文件上传
|
||||||
|
*/
|
||||||
private Map<String, Resource> fileForm;
|
private Map<String, Resource> fileForm;
|
||||||
/** Cookie */
|
/**
|
||||||
|
* Cookie
|
||||||
|
*/
|
||||||
private String cookie;
|
private String cookie;
|
||||||
|
|
||||||
/** 连接对象 */
|
/**
|
||||||
|
* 连接对象
|
||||||
|
*/
|
||||||
private HttpConnection httpConnection;
|
private HttpConnection httpConnection;
|
||||||
/** 是否禁用缓存 */
|
/**
|
||||||
|
* 是否禁用缓存
|
||||||
|
*/
|
||||||
private boolean isDisableCache;
|
private boolean isDisableCache;
|
||||||
/** 是否对url中的参数进行编码 */
|
/**
|
||||||
|
* 是否对url中的参数进行编码
|
||||||
|
*/
|
||||||
private boolean encodeUrlParams;
|
private boolean encodeUrlParams;
|
||||||
/** 是否是REST请求模式 */
|
/**
|
||||||
|
* 是否是REST请求模式
|
||||||
|
*/
|
||||||
private boolean isRest;
|
private boolean isRest;
|
||||||
/** 重定向次数计数器,内部使用 */
|
/**
|
||||||
|
* 重定向次数计数器,内部使用
|
||||||
|
*/
|
||||||
private int redirectCount;
|
private int redirectCount;
|
||||||
/** 最大重定向次数 */
|
/**
|
||||||
|
* 最大重定向次数
|
||||||
|
*/
|
||||||
private int maxRedirectCount;
|
private int maxRedirectCount;
|
||||||
/** Chuncked块大小,0或小于0表示不设置Chuncked模式 */
|
/**
|
||||||
|
* Chuncked块大小,0或小于0表示不设置Chuncked模式
|
||||||
|
*/
|
||||||
private int blockSize;
|
private int blockSize;
|
||||||
/** 代理 */
|
/**
|
||||||
|
* 代理
|
||||||
|
*/
|
||||||
private Proxy proxy;
|
private Proxy proxy;
|
||||||
|
|
||||||
/** HostnameVerifier,用于HTTPS安全连接 */
|
/**
|
||||||
|
* HostnameVerifier,用于HTTPS安全连接
|
||||||
|
*/
|
||||||
private HostnameVerifier hostnameVerifier;
|
private HostnameVerifier hostnameVerifier;
|
||||||
/** SSLSocketFactory,用于HTTPS安全连接 */
|
/**
|
||||||
|
* SSLSocketFactory,用于HTTPS安全连接
|
||||||
|
*/
|
||||||
private SSLSocketFactory ssf;
|
private SSLSocketFactory ssf;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -146,6 +176,7 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------- static Http Method start
|
// ---------------------------------------------------------------- static Http Method start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* POST请求
|
* POST请求
|
||||||
*
|
*
|
||||||
@ -317,6 +348,7 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------- Http Request Header start
|
// ---------------------------------------------------------------- Http Request Header start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置contentType
|
* 设置contentType
|
||||||
*
|
*
|
||||||
@ -422,6 +454,7 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
// ---------------------------------------------------------------- Http Request Header end
|
// ---------------------------------------------------------------- Http Request Header end
|
||||||
|
|
||||||
// ---------------------------------------------------------------- Form start
|
// ---------------------------------------------------------------- Form start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置表单数据<br>
|
* 设置表单数据<br>
|
||||||
*
|
*
|
||||||
@ -474,7 +507,6 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
* @param value 值
|
* @param value 值
|
||||||
* @param parameters 参数对,奇数为名,偶数为值
|
* @param parameters 参数对,奇数为名,偶数为值
|
||||||
* @return this
|
* @return this
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public HttpRequest form(String name, Object value, Object... parameters) {
|
public HttpRequest form(String name, Object value, Object... parameters) {
|
||||||
form(name, value);
|
form(name, value);
|
||||||
@ -491,7 +523,6 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
*
|
*
|
||||||
* @param formMap 表单内容
|
* @param formMap 表单内容
|
||||||
* @return this
|
* @return this
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public HttpRequest form(Map<String, Object> formMap) {
|
public HttpRequest form(Map<String, Object> formMap) {
|
||||||
if (MapUtil.isNotEmpty(formMap)) {
|
if (MapUtil.isNotEmpty(formMap)) {
|
||||||
@ -608,6 +639,7 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
// ---------------------------------------------------------------- Form end
|
// ---------------------------------------------------------------- Form end
|
||||||
|
|
||||||
// ---------------------------------------------------------------- Body start
|
// ---------------------------------------------------------------- Body start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置内容主体<br>
|
* 设置内容主体<br>
|
||||||
* 请求体body参数支持两种类型:
|
* 请求体body参数支持两种类型:
|
||||||
@ -686,8 +718,9 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
public HttpRequest body(byte[] bodyBytes) {
|
public HttpRequest body(byte[] bodyBytes) {
|
||||||
Assert.notNull(bodyBytes, "Body must be not null !");
|
if (null != bodyBytes) {
|
||||||
this.bodyBytes = bodyBytes;
|
this.bodyBytes = bodyBytes;
|
||||||
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------- Body end
|
// ---------------------------------------------------------------- Body end
|
||||||
@ -833,9 +866,9 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
* ...
|
* ...
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @see SSLSocketFactoryBuilder
|
|
||||||
* @param protocol 协议
|
* @param protocol 协议
|
||||||
* @return this
|
* @return this
|
||||||
|
* @see SSLSocketFactoryBuilder
|
||||||
*/
|
*/
|
||||||
public HttpRequest setSSLProtocol(String protocol) {
|
public HttpRequest setSSLProtocol(String protocol) {
|
||||||
if (null == this.ssf) {
|
if (null == this.ssf) {
|
||||||
@ -889,7 +922,6 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* 一般执行完execute之后会把响应内容全部读出来放在一个 byte数组里,如果你响应的内容太多内存就爆了,此法是发送完请求不直接读响应内容,等有需要的时候读。
|
* 一般执行完execute之后会把响应内容全部读出来放在一个 byte数组里,如果你响应的内容太多内存就爆了,此法是发送完请求不直接读响应内容,等有需要的时候读。
|
||||||
|
|
||||||
*
|
*
|
||||||
* @return 异步对象,使用get方法获取HttpResponse对象
|
* @return 异步对象,使用get方法获取HttpResponse对象
|
||||||
*/
|
*/
|
||||||
@ -943,6 +975,7 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------- Private method start
|
// ---------------------------------------------------------------- Private method start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化网络连接
|
* 初始化网络连接
|
||||||
*/
|
*/
|
||||||
@ -1087,6 +1120,7 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 普通字符串数据
|
// 普通字符串数据
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送普通表单内容
|
* 发送普通表单内容
|
||||||
*
|
*
|
||||||
@ -1152,6 +1186,7 @@ public class HttpRequest extends HttpBase<HttpRequest> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 添加结尾数据
|
// 添加结尾数据
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传表单结束
|
* 上传表单结束
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user