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