diff --git a/hutool-core/src/main/java/cn/hutool/core/text/SpecialSymbolUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/SpecialSymbolUtil.java
deleted file mode 100644
index 968b62ffa..000000000
--- a/hutool-core/src/main/java/cn/hutool/core/text/SpecialSymbolUtil.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package cn.hutool.core.text;
-
-import java.math.BigInteger;
-
-/**
- * 符号工具类
- * @author dazer & neusoft
- * @date 2021/3/26 12:21
- * 别名:Symbol or special signal or Special symbols
- * 说明:获取常见的特殊符号,如:带圈数字、
- *
- * {@link UnicodeUtil}
- * @link 百度百科 https://baike.baidu.com/item/%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6/112715?fr=aladdin
- * @link 360百科 https://baike.so.com/doc/5408938-5646935.html
- * @link 百科 https://www.baike.com/wikiid/3469869303298461399?prd=home_search&search_id=5bm572esa2k000&view_id=1takcxx7kjc000
- * @link coolsymbol https://coolsymbol.com/
- * @link 维基百科wikipedia https://en.wikipedia.org/wiki/List_of_Unicode_characters#Unicode_symbols
- *
- * @since 5.6.2
- */
-public class SpecialSymbolUtil {
- public static final String UNICODE_START_CHAR = "\\u";
- private SpecialSymbolUtil(){}
-
- /**
- * 获取带圈数字 /封闭式字母数字 ,从1-20,超过1-20报错
- *
- * 0 1 2 3 4 5 6 7 8 9 A B C D E F
- * U+246x ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯
- * U+247x ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿
- * U+248x ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏
- * U+249x ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟
- * U+24Ax ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯
- * U+24Bx ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ
- * U+24Cx Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
- * U+24Dx ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ
- * U+24Ex ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯
- * U+24Fx ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
- * @link Unicode_symbols https://en.wikipedia.org/wiki/List_of_Unicode_characters#Unicode_symbols
- * @link Enclosed Alphanumerics https://en.wikipedia.org/wiki/Enclosed_Alphanumerics
- *
- *
- * System.out.println(enclosedAlphanumericsStyle1ByInt(1));
- * System.out.println(enclosedAlphanumericsStyle1ByInt(2));
- * System.out.println(enclosedAlphanumericsStyle1ByInt(3));
- * System.out.println(enclosedAlphanumericsStyle1ByInt(4));
- * System.out.println(enclosedAlphanumericsStyle1ByInt(14));
- * System.out.println(enclosedAlphanumericsStyle1ByInt(18));
- * System.out.println(enclosedAlphanumericsStyle1ByInt(19));
- * System.out.println(enclosedAlphanumericsStyle1ByInt(20));
- *
- *
- * @param number 十进制数字,从1、-->10、11--->20
- * @return ①②③④⑤⑥⑦⑧⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳
- */
- public static String enclosedNumericsByInt(int number) {
- if (number <= 0 || number > 20) {
- throw new IllegalArgumentException("number取值范围是[1-20]的正整数,包含1和20");
- }
- String start = "①";
- String unicodeStart = UnicodeUtil.toUnicode(start).substring(UNICODE_START_CHAR.length(),
- UnicodeUtil.toUnicode(start).length() - 1);
- // begin: U+246x的24
- String beginHex = unicodeStart.substring(0, 2);
- // U+246x的6
- String middleHex = number >= 17 ? "7" : "6";
- // A
- String endHex = Integer.toHexString(number >= 17 ? number - 17 : number - 1);
- // U + 24 + 60
- String unicodeStr = UNICODE_START_CHAR + beginHex + middleHex + endHex;
- return UnicodeUtil.toString(unicodeStr);
- }
-
- /**
- * 获取带圈字母 /封闭式字母 ,从a-z or A-Z
- * 根据字符 获取 Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
- *
- * System.out.println(encloseAlphabetByChar( 'A'));
- * System.out.println(encloseAlphabetByChar( 'a'));
- * System.out.println(encloseAlphabetByChar( 'z'));
- * System.out.println(encloseAlphabetByChar( 'Z'))
- *
- * @author dazer
- * @param letter 字母,不区分大小写,'a'、'b'、'c'、'd'...'x'、'y'、'z'; 'A'、'B'...'Z'
- * @date 2021/3/26 18:10
- */
- public static String encloseAlphabetByChar(char letter) {
- if (!(letter >= 'a' && letter <= 'z' || letter >= 'A' && letter <= 'Z')) {
- throw new IllegalArgumentException("number取值范围是[a-z]、[A-Z]的字符");
- }
- // \u24b6
- String start = "Ⓐ";
- String hexStr = UnicodeUtil.toUnicode(start).substring(UNICODE_START_CHAR.length());
- int difference = letter >= 'a' && letter <= 'z' ? (letter - (int)'a') : (letter - (int)'A');
- String hex = new BigInteger(hexStr, 16).add(new BigInteger(String.valueOf(difference), 10)).toString(16);
- //
- String unicodeStr = UNICODE_START_CHAR + hex;
- return UnicodeUtil.toString(unicodeStr);
- }
-}
diff --git a/hutool-core/src/main/java/cn/hutool/core/text/UnicodeUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/UnicodeUtil.java
index 0a506061f..ff8c77273 100644
--- a/hutool-core/src/main/java/cn/hutool/core/text/UnicodeUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/text/UnicodeUtil.java
@@ -54,6 +54,30 @@ public class UnicodeUtil {
return sb.toString();
}
+ /**
+ * 字符编码为Unicode形式
+ *
+ * @param c 被编码的字符
+ * @return Unicode字符串
+ * @since 5.6.2
+ * @see HexUtil#toUnicodeHex(char)
+ */
+ public static String toUnicode(char c) {
+ return HexUtil.toUnicodeHex(c);
+ }
+
+ /**
+ * 字符编码为Unicode形式
+ *
+ * @param c 被编码的字符
+ * @return Unicode字符串
+ * @since 5.6.2
+ * @see HexUtil#toUnicodeHex(int)
+ */
+ public static String toUnicode(int c) {
+ return HexUtil.toUnicodeHex(c);
+ }
+
/**
* 字符串编码为Unicode形式
*
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java
index fcc47ff9e..eb4ee1d11 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java
@@ -366,4 +366,47 @@ public class CharUtil {
public static int digit16(int b) {
return Character.digit(b, 16);
}
+
+ /**
+ * 将字母、数字转换为带圈的字符:
+ *
+ * '1' -》 '①'
+ * 'A' -》 'Ⓐ'
+ * 'a' -》 'ⓐ'
+ *
+ *
+ * @param c 被转换的字符,如果字符不支持转换,返回原字符
+ * @return 转换后的字符
+ * @since 5.6.2
+ */
+ public static char toCloseChar(char c){
+ int result = c;
+ if(c >='1' && c <= '9'){
+ result = '①' + c - '1';
+ } else if(c >='A' && c <= 'Z'){
+ result = 'Ⓐ' + c - 'A';
+ } else if(c >='a' && c <= 'z'){
+ result = 'ⓐ' + c - 'a';
+ }
+ return (char) result;
+ }
+
+ /**
+ * 将[1-20]数字转换为带圈的字符:
+ *
+ * 1 -》 '①'
+ * 12 -》 '⑫'
+ * 20 -》 '⑳'
+ *
+ *
+ * @param number 被转换的数字
+ * @return 转换后的字符
+ * @since 5.6.2
+ */
+ public static char toCloseByNumber(int number){
+ if(number > 20){
+ throw new IllegalArgumentException("Number must be [1-20]");
+ }
+ return (char) ('①' + number - 1);
+ }
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/HexUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/HexUtil.java
index cf59864ed..a102a88b0 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/HexUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/HexUtil.java
@@ -262,7 +262,7 @@ public class HexUtil {
* 转换的字符串如果u后不足4位,则前面用0填充,例如:
*
*
- * '我' =》\u4f60
+ * '你' =》\u4f60
*
*
* @param value int值,也可以是char
@@ -287,7 +287,7 @@ public class HexUtil {
* 转换的字符串如果u后不足4位,则前面用0填充,例如:
*
*
- * '我' =》\u4f60
+ * '你' =》'\u4f60'
*
*
* @param ch char值
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java
index 9af6fcb60..cd99357ff 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java
@@ -4,7 +4,7 @@ import org.junit.Assert;
import org.junit.Test;
public class CharUtilTest {
-
+
@Test
public void trimTest() {
//此字符串中的第一个字符为不可见字符: '\u202a'
@@ -12,13 +12,13 @@ public class CharUtilTest {
Assert.assertEquals('\u202a', str.charAt(0));
Assert.assertTrue(CharUtil.isBlankChar(str.charAt(0)));
}
-
+
@Test
public void isEmojiTest() {
String a = "莉🌹";
Assert.assertFalse(CharUtil.isEmoji(a.charAt(0)));
Assert.assertTrue(CharUtil.isEmoji(a.charAt(1)));
-
+
}
@Test
@@ -38,4 +38,18 @@ public class CharUtilTest {
char a3 = '\u3000';
Assert.assertTrue(CharUtil.isBlankChar(a3));
}
+
+ @Test
+ public void toCloseCharTest(){
+ Assert.assertEquals('②', CharUtil.toCloseChar('2'));
+ Assert.assertEquals('Ⓜ', CharUtil.toCloseChar('M'));
+ Assert.assertEquals('ⓡ', CharUtil.toCloseChar('r'));
+ }
+
+ @Test
+ public void toCloseByNumberTest(){
+ Assert.assertEquals('②', CharUtil.toCloseByNumber(2));
+ Assert.assertEquals('⑫', CharUtil.toCloseByNumber(12));
+ Assert.assertEquals('⑳', CharUtil.toCloseByNumber(20));
+ }
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java
index 64eaa25f9..a87b30ce5 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java
@@ -9,26 +9,26 @@ import org.junit.Test;
*
*/
public class HexUtilTest {
-
+
@Test
public void hexStrTest(){
String str = "我是一个字符串";
-
+
String hex = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);
String decodedStr = HexUtil.decodeHexStr(hex);
-
+
Assert.assertEquals(str, decodedStr);
}
-
+
@Test
public void toUnicodeHexTest() {
String unicodeHex = HexUtil.toUnicodeHex('\u2001');
Assert.assertEquals("\\u2001", unicodeHex);
-
+
unicodeHex = HexUtil.toUnicodeHex('你');
Assert.assertEquals("\\u4f60", unicodeHex);
}
-
+
@Test
public void isHexNumberTest() {
String a = "0x3544534F444";
diff --git a/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java
index cc61981ef..e55c89c45 100644
--- a/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java
+++ b/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java
@@ -58,6 +58,7 @@ public class ServletUtil {
public static final String METHOD_TRACE = "TRACE";
// --------------------------------------------------------- getParam start
+
/**
* 获得所有请求参数
*
@@ -92,7 +93,7 @@ public class ServletUtil {
* @since 4.0.2
*/
public static String getBody(ServletRequest request) {
- try(final BufferedReader reader = request.getReader()) {
+ try (final BufferedReader reader = request.getReader()) {
return IoUtil.read(reader);
} catch (IOException e) {
throw new IORuntimeException(e);
@@ -117,12 +118,13 @@ public class ServletUtil {
// --------------------------------------------------------- getParam end
// --------------------------------------------------------- fillBean start
+
/**
* ServletRequest 参数转Bean
*
- * @param Bean类型
- * @param request ServletRequest
- * @param bean Bean
+ * @param Bean类型
+ * @param request ServletRequest
+ * @param bean Bean
* @param copyOptions 注入时的设置
* @return Bean
* @since 3.0.4
@@ -133,17 +135,17 @@ public class ServletUtil {
@Override
public Object value(String key, Type valueType) {
String[] values = request.getParameterValues(key);
- if(ArrayUtil.isEmpty(values)){
+ if (ArrayUtil.isEmpty(values)) {
values = request.getParameterValues(beanName + StrUtil.DOT + key);
- if(ArrayUtil.isEmpty(values)){
+ if (ArrayUtil.isEmpty(values)) {
return null;
}
}
- if(1 == values.length){
+ if (1 == values.length) {
// 单值表单直接返回这个值
return values[0];
- }else{
+ } else {
// 多值表单返回数组
return values;
}
@@ -160,9 +162,9 @@ public class ServletUtil {
/**
* ServletRequest 参数转Bean
*
- * @param Bean类型
- * @param request {@link ServletRequest}
- * @param bean Bean
+ * @param Bean类型
+ * @param request {@link ServletRequest}
+ * @param bean Bean
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
@@ -173,9 +175,9 @@ public class ServletUtil {
/**
* ServletRequest 参数转Bean
*
- * @param Bean类型
- * @param request ServletRequest
- * @param beanClass Bean Class
+ * @param Bean类型
+ * @param request ServletRequest
+ * @param beanClass Bean Class
* @param isIgnoreError 是否忽略注入错误
* @return Bean
*/
@@ -202,12 +204,12 @@ public class ServletUtil {
* 需要注意的是,使用此方法获取的客户IP地址必须在Http服务器(例如Nginx)中配置头信息,否则容易造成IP伪造。
*
*
- * @param request 请求对象{@link HttpServletRequest}
+ * @param request 请求对象{@link HttpServletRequest}
* @param otherHeaderNames 其他自定义头文件,通常在Http服务器(例如Nginx)中配置
* @return IP地址
*/
public static String getClientIP(HttpServletRequest request, String... otherHeaderNames) {
- String[] headers = { "X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR" };
+ String[] headers = {"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"};
if (ArrayUtil.isNotEmpty(otherHeaderNames)) {
headers = ArrayUtil.addAll(headers, otherHeaderNames);
}
@@ -223,7 +225,7 @@ public class ServletUtil {
* 需要注意的是,使用此方法获取的客户IP地址必须在Http服务器(例如Nginx)中配置头信息,否则容易造成IP伪造。
*
*
- * @param request 请求对象{@link HttpServletRequest}
+ * @param request 请求对象{@link HttpServletRequest}
* @param headerNames 自定义头,通常在Http服务器(例如Nginx)中配置
* @return IP地址
* @since 4.4.1
@@ -258,7 +260,7 @@ public class ServletUtil {
* 包括文件和普通表单数据
* 在同一次请求中,此方法只能被执行一次!
*
- * @param request {@link ServletRequest}
+ * @param request {@link ServletRequest}
* @param uploadSetting 上传文件的设定,包括最大文件大小、保存在内存的边界大小、临时目录、扩展名限定等
* @return MultiPart表单
* @throws IORuntimeException IO异常
@@ -276,6 +278,7 @@ public class ServletUtil {
}
// --------------------------------------------------------- Header start
+
/**
* 获取请求所有的头(header)信息
*
@@ -300,7 +303,7 @@ public class ServletUtil {
/**
* 忽略大小写获得请求header中的信息
*
- * @param request 请求对象{@link HttpServletRequest}
+ * @param request 请求对象{@link HttpServletRequest}
* @param nameIgnoreCase 忽略大小写头信息的KEY
* @return header值
*/
@@ -320,8 +323,8 @@ public class ServletUtil {
/**
* 获得请求header中的信息
*
- * @param request 请求对象{@link HttpServletRequest}
- * @param name 头信息的KEY
+ * @param request 请求对象{@link HttpServletRequest}
+ * @param name 头信息的KEY
* @param charsetName 字符集
* @return header值
*/
@@ -333,7 +336,7 @@ public class ServletUtil {
* 获得请求header中的信息
*
* @param request 请求对象{@link HttpServletRequest}
- * @param name 头信息的KEY
+ * @param name 头信息的KEY
* @param charset 字符集
* @return header值
* @since 4.6.2
@@ -402,11 +405,12 @@ public class ServletUtil {
// --------------------------------------------------------- Header end
// --------------------------------------------------------- Cookie start
+
/**
* 获得指定的Cookie
*
* @param httpServletRequest {@link HttpServletRequest}
- * @param name cookie名
+ * @param name cookie名
* @return Cookie对象
*/
public static Cookie getCookie(HttpServletRequest httpServletRequest, String name) {
@@ -421,7 +425,7 @@ public class ServletUtil {
*/
public static Map readCookieMap(HttpServletRequest httpServletRequest) {
final Cookie[] cookies = httpServletRequest.getCookies();
- if(ArrayUtil.isEmpty(cookies)){
+ if (ArrayUtil.isEmpty(cookies)) {
return MapUtil.empty();
}
@@ -435,7 +439,7 @@ public class ServletUtil {
* 设定返回给客户端的Cookie
*
* @param response 响应对象{@link HttpServletResponse}
- * @param cookie Servlet Cookie对象
+ * @param cookie Servlet Cookie对象
*/
public static void addCookie(HttpServletResponse response, Cookie cookie) {
response.addCookie(cookie);
@@ -445,8 +449,8 @@ public class ServletUtil {
* 设定返回给客户端的Cookie
*
* @param response 响应对象{@link HttpServletResponse}
- * @param name Cookie名
- * @param value Cookie值
+ * @param name Cookie名
+ * @param value Cookie值
*/
public static void addCookie(HttpServletResponse response, String name, String value) {
response.addCookie(new Cookie(name, value));
@@ -455,12 +459,12 @@ public class ServletUtil {
/**
* 设定返回给客户端的Cookie
*
- * @param response 响应对象{@link HttpServletResponse}
- * @param name cookie名
- * @param value cookie值
+ * @param response 响应对象{@link HttpServletResponse}
+ * @param name cookie名
+ * @param value cookie值
* @param maxAgeInSeconds -1: 关闭浏览器清除Cookie. 0: 立即清除Cookie. >0 : Cookie存在的秒数.
- * @param path Cookie的有效路径
- * @param domain the domain name within which this cookie is visible; form is according to RFC 2109
+ * @param path Cookie的有效路径
+ * @param domain the domain name within which this cookie is visible; form is according to RFC 2109
*/
public static void addCookie(HttpServletResponse response, String name, String value, int maxAgeInSeconds, String path, String domain) {
Cookie cookie = new Cookie(name, value);
@@ -477,9 +481,9 @@ public class ServletUtil {
* Path: "/"
* No Domain
*
- * @param response 响应对象{@link HttpServletResponse}
- * @param name cookie名
- * @param value cookie值
+ * @param response 响应对象{@link HttpServletResponse}
+ * @param name cookie名
+ * @param value cookie值
* @param maxAgeInSeconds -1: 关闭浏览器清除Cookie. 0: 立即清除Cookie. >0 : Cookie存在的秒数.
*/
public static void addCookie(HttpServletResponse response, String name, String value, int maxAgeInSeconds) {
@@ -488,6 +492,7 @@ public class ServletUtil {
// --------------------------------------------------------- Cookie end
// --------------------------------------------------------- Response start
+
/**
* 获得PrintWriter
*
@@ -506,8 +511,8 @@ public class ServletUtil {
/**
* 返回数据给客户端
*
- * @param response 响应对象{@link HttpServletResponse}
- * @param text 返回的内容
+ * @param response 响应对象{@link HttpServletResponse}
+ * @param text 返回的内容
* @param contentType 返回的类型
*/
public static void write(HttpServletResponse response, String text, String contentType) {
@@ -528,7 +533,7 @@ public class ServletUtil {
* 返回文件给客户端
*
* @param response 响应对象{@link HttpServletResponse}
- * @param file 写出的文件对象
+ * @param file 写出的文件对象
* @since 4.1.15
*/
public static void write(HttpServletResponse response, File file) {
@@ -546,21 +551,21 @@ public class ServletUtil {
/**
* 返回数据给客户端
*
- * @param response 响应对象{@link HttpServletResponse}
- * @param in 需要返回客户端的内容
+ * @param response 响应对象{@link HttpServletResponse}
+ * @param in 需要返回客户端的内容
* @param contentType 返回的类型
- * 如:
- * 1、application/pdf、
- * 2、application/vnd.ms-excel、
- * 3、application/msword、
- * 4、application/vnd.ms-powerpoint
- * docx、xlsx 这种 office 2007 格式 设置 MIME;网页里面docx 文件是没问题,但是下载下来了之后就变成doc格式了
- * https://blog.csdn.net/cyh2260629/article/details/73824760
- * 5、MIME_EXCELX_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
- * 6、MIME_PPTX_TYPE = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
- * 7、MIME_WORDX_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
- * 8、MIME_STREAM_TYPE = "application/octet-stream;charset=utf-8"; #原始字节流
- * @param fileName 文件名
+ * 如:
+ * 1、application/pdf、
+ * 2、application/vnd.ms-excel、
+ * 3、application/msword、
+ * 4、application/vnd.ms-powerpoint
+ * docx、xlsx 这种 office 2007 格式 设置 MIME;网页里面docx 文件是没问题,但是下载下来了之后就变成doc格式了
+ * https://blog.csdn.net/cyh2260629/article/details/73824760
+ * 5、MIME_EXCELX_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+ * 6、MIME_PPTX_TYPE = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
+ * 7、MIME_WORDX_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
+ * 8、MIME_STREAM_TYPE = "application/octet-stream;charset=utf-8"; #原始字节流
+ * @param fileName 文件名
* @since 4.1.15
*/
public static void write(HttpServletResponse response, InputStream in, String contentType, String fileName) {
@@ -573,8 +578,8 @@ public class ServletUtil {
/**
* 返回数据给客户端
*
- * @param response 响应对象{@link HttpServletResponse}
- * @param in 需要返回客户端的内容
+ * @param response 响应对象{@link HttpServletResponse}
+ * @param in 需要返回客户端的内容
* @param contentType 返回的类型
*/
public static void write(HttpServletResponse response, InputStream in, String contentType) {
@@ -586,7 +591,7 @@ public class ServletUtil {
* 返回数据给客户端
*
* @param response 响应对象{@link HttpServletResponse}
- * @param in 需要返回客户端的内容
+ * @param in 需要返回客户端的内容
*/
public static void write(HttpServletResponse response, InputStream in) {
write(response, in, IoUtil.DEFAULT_BUFFER_SIZE);
@@ -595,8 +600,8 @@ public class ServletUtil {
/**
* 返回数据给客户端
*
- * @param response 响应对象{@link HttpServletResponse}
- * @param in 需要返回客户端的内容
+ * @param response 响应对象{@link HttpServletResponse}
+ * @param in 需要返回客户端的内容
* @param bufferSize 缓存大小
*/
public static void write(HttpServletResponse response, InputStream in, int bufferSize) {
@@ -616,15 +621,15 @@ public class ServletUtil {
* 设置响应的Header
*
* @param response 响应对象{@link HttpServletResponse}
- * @param name 名
- * @param value 值,可以是String,Date, int
+ * @param name 名
+ * @param value 值,可以是String,Date, int
*/
public static void setHeader(HttpServletResponse response, String name, Object value) {
if (value instanceof String) {
response.setHeader(name, (String) value);
} else if (Date.class.isAssignableFrom(value.getClass())) {
response.setDateHeader(name, ((Date) value).getTime());
- } else if (value instanceof Integer || "int".equals(value.getClass().getSimpleName().toLowerCase())) {
+ } else if (value instanceof Integer || "int".equalsIgnoreCase(value.getClass().getSimpleName())) {
response.setIntHeader(name, (int) value);
} else {
response.setHeader(name, value.toString());
diff --git a/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java
index 3946869f5..82dd8651e 100644
--- a/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java
+++ b/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java
@@ -1,5 +1,6 @@
package cn.hutool.extra.servlet;
+import org.junit.Ignore;
import org.junit.Test;
import javax.servlet.http.HttpServletResponse;
@@ -8,18 +9,22 @@ import java.nio.charset.StandardCharsets;
/**
* ServletUtil工具类测试
+ *
* @author dazer
* @date 2021/3/24 15:02
* @see ServletUtil
*/
public class ServletUtilTest {
+
@Test
+ @Ignore
public void writeTest() {
HttpServletResponse response = null;
- byte[] bytes = new String("地球是我们共同的家园,需要大家珍惜.").getBytes(StandardCharsets.UTF_8);
+ byte[] bytes = "地球是我们共同的家园,需要大家珍惜.".getBytes(StandardCharsets.UTF_8);
//下载文件
// 这里没法直接测试,直接写到这里,方便调用;
+ //noinspection ConstantConditions
if (response != null) {
String fileName = "签名文件.pdf";
String contentType = "application/pdf";// application/octet-stream、image/jpeg、image/gif