开心一笑: 会买水果的狗狗

    关注微信公众号

    QQ群:831045818

    app下载

    当前位置:首页> java > 技术文档 > 正文
    Spring工具类
    发布时间:2024-02-06 09:49:33 浏览次数:
    <p><br/></p><p><img src="/u/cms/www/202402/300664830987.png"/>  1 Assert</p><p>很多时候,我们需要在代码中做判断:如果不满足条件,则抛异常。</p><p>有没有统一的封装呢?</p><p>其实Spring给我们提供了Assert类,它表示断言。</p><p>1.1 断言参数是否为空</p><p>断言参数是否空,如果不满足条件,则直接抛异常。</p><pre class="brush:java;toolbar:false">Stringstr=null; Assert.isNull(str,"str必须为空"); Assert.isNull(str,()->"str必须为空"); Assert.notNull(str,"str不能为空");</pre><p>如果不满足条件就会抛出IllegalArgumentException异常。</p><p>1.2 断言集合是否为空</p><p>断言集合是否空,如果不满足条件,则直接抛异常。</p><pre class="brush:java;toolbar:false">List<String>list=null; Map<String,String>map=null; Assert.notEmpty(list,"list不能为空"); Assert.notEmpty(list,()->"list不能为空"); Assert.notEmpty(map,"map不能为空");</pre><p>如果不满足条件就会抛出IllegalArgumentException异常。</p><p>1.3 断言条件是否为空</p><p>断言是否满足某个条件,如果不满足条件,则直接抛异常。</p><pre class="brush:java;toolbar:false">List<String>list=null; Assert.isTrue(CollectionUtils.isNotEmpty(list),"list不能为空"); Assert.isTrue(CollectionUtils.isNotEmpty(list),()->"list不能为空");</pre><p>当然Assert类还有一些其他的功能,这里就不多介绍了。<img src="/u/cms/www/202402/521788859526.png"/></p><p>2 StringUtils</p><p>在我们日常开发过程中,对字符串的操作是非常频繁的,但JDK提供的对于字符串操作的方法,过于简单,无法满足我们开发中的需求。</p><p>其实Spring提供了工具类StringUtils,对JDK中一些字符串的操作进行了扩展。</p><p>2.1 判空</p><p>StringUtils类其实有个isEmpty()方法判断,不过已经被废弃了。</p><p>我们可以改成使用hasLength()方法判断,例如:</p><pre class="brush:java;toolbar:false">if(!StringUtils.hasLength("")){ System.out.println("字符串为空"); }</pre><p>2.2 去掉空格</p><p>对于后端的很多接口,经常需要去掉前后空格,我们可以使用String类的trim(),但是如果要同时去掉中间的空格呢?</p><p>可以使用StringUtils类的trimAllWhitespace方法。</p><p>例如:</p><pre class="brush:java;toolbar:false">@Test publicvoidtestEmpty(){ System.out.println("1"+StringUtils.trimAllWhitespace("苏三说技术测试")+"1"); }</pre><p>这个方法执行接口:1苏三说技术测试1,会把中间的空格也去掉了。</p><p>2.3 判断开头或结尾字符串</p><p>要判断一个字符串,是不是以某个固定字符串开头或者结尾,是非常常见的需求。</p><p>我们可以使用StringUtils类的startsWithIgnoreCase和endsWithIgnoreCase,可以忽略大小写比较字符串。</p><p>例如:</p><pre class="brush:java;toolbar:false">@Test publicvoidtestEmpty(){ System.out.println(StringUtils.startsWithIgnoreCase("苏三说技术","苏三")); System.out.println(StringUtils.endsWithIgnoreCase("苏三说技术","技术")); }</pre><p>该方法的执行结果会返回两个true。</p><p>2.4 集合拼接字符串</p><p>有时候我们需要将某个字符串集合的所有元素,拼接成一个字符串,用逗号隔开。</p><p>这种场景可以使用StringUtils类的collectionToCommaDelimitedString方法。</p><p>例如:</p><pre class="brush:java;toolbar:false">@Test publicvoidtestEmpty(){ List<String>list=newArrayList<>(); list.add("a"); list.add("b"); list.add("c"); System.out.println(StringUtils.collectionToCommaDelimitedString(list)); }</pre><p>该方法的执行结果:a,b,c</p><p>这个工具类里面还有很多有用的方法:<img src="/u/cms/www/202402/113803802933.png"/></p><p>3. CollectionUtils</p><p>在我们日常开发当中,经常会遇到集合,比如:list判空的情况。</p><p>其实Spring专门为我们提供了,给集合判空的工具类:CollectionUtils,它位于org.springframework.util包下。<img src="/u/cms/www/202402/163829089750.png"/></p><p>对于一些简单的集合判断,集合中是否包含某个元素,集合转数组,用这个工具还是非常方便的。</p><p>3.1 集合判空</p><p>通过CollectionUtils工具类的isEmpty方法可以轻松判断集合是否为空。</p><p>例如:</p><pre class="brush:java;toolbar:false">List<Integer>list=newArrayList<>(); list.add(2); list.add(1); list.add(3); if(CollectionUtils.isEmpty(list)){ System.out.println("集合为空"); }</pre><p>3.2 判断元素是否存在</p><p>通过CollectionUtils工具类的contains方法,可以判断元素在集合中是否存在。</p><p>例如:</p><pre class="brush:java;toolbar:false">List<Integer>list=newArrayList<>(); list.add(2); list.add(1); list.add(3); if(CollectionUtils.contains(list.iterator(),3)){ System.out.println("元素存在"); }</pre><p>在判断时需要先调用集合的iterator()方法。</p><p>4 ObjectUtils</p><p>Spring为我们专门提供了一个对象操作工具:ObjectUtils,也在org.springframework.util包下。</p><p>里面有很多非常有用的方法。</p><p>4.1 判空</p><p>之前已经介绍过字符串判空工具类StringUtils,和集合的判空工具类CollectionUtils。</p><p>而ObjectUtils工具的判空更强大,支持:对象、字符串、集合、数组、Optional、Map的判断。</p><p>例如:</p><pre class="brush:java;toolbar:false">@Test publicvoidtestEmpty(){ Stringa="123"; Integerb=newInteger(1); List<String>c=newArrayList<>(); Integer[]d=newInteger[]{b}; c.add(a); Map<String,String>e=newHashMap<>(); e.put(a,a); Optional<String>f=Optional.of(a); if(!ObjectUtils.isEmpty(a)){ System.out.println("a不为空"); } if(!ObjectUtils.isEmpty(b)){ System.out.println("b不为空"); } if(!ObjectUtils.isEmpty(c)){ System.out.println("c不为空"); } if(!ObjectUtils.isEmpty(d)){ System.out.println("d不为空"); } if(!ObjectUtils.isEmpty(e)){ System.out.println("e不为空"); } if(!ObjectUtils.isEmpty(f)){ System.out.println("f不为空"); } }</pre><p>这6种对象的判空都支持,非常强大。</p><p>4.2 判断两个对象相等</p><p>之前我们用Objects.equals方法,判断两个对象是否相等,经常会出现空指针问题。</p><p>而ObjectUtils类提供了安全的判断两个对象相等的方法:nullSafeEquals。</p><p>例如:</p><pre class="brush:java;toolbar:false">@Test publicvoidtestEquals(){ Stringa="123"; Stringb=null; System.out.println(ObjectUtils.nullSafeEquals(a,b)); }</pre><p>这个例子返回的是false,不会出现空指针的问题。</p><p>甚至可以判断两个数组是否相等。</p><p>例如:</p><pre class="brush:java;toolbar:false">@Test publicvoidtestArrayEquals(){ String[]a=newString[]{"123"}; String[]b=newString[]{"123"}; System.out.println(ObjectUtils.nullSafeEquals(a,b)); }</pre><p>这个例子的执行结果返回的是true。</p><p>4.3 获取对象的hashCode</p><p>如果想要快速获取某个对象十六进制的hashCode,则可以调用getIdentityHexString方法。</p><p>例如:</p><pre class="brush:java;toolbar:false">@Test publicvoidtestIdentityHex(){ Stringa="123"; System.out.println(ObjectUtils.getIdentityHexString(a)); }</pre><p>执行结果:2925bf5b</p><p>5 ClassUtils</p><p>Spring的org.springframework.util包下的ClassUtils类,它里面有很多让我们惊喜的功能。</p><p>它里面包含了类和对象相关的很多非常实用的方法。</p><p>5.1 获取对象的所有接口</p><p>如果你想获取某个对象的所有接口,可以使用ClassUtils的getAllInterfaces方法。例如:</p><pre class="brush:java;toolbar:false">Class<?>[]allInterfaces=ClassUtils.getAllInterfaces(newUser());</pre><p>5.2 获取某个类的包名</p><p>如果你想获取某个类的包名,可以使用ClassUtils的getPackageName方法。例如:</p><pre class="brush:java;toolbar:false">StringpackageName=ClassUtils.getPackageName(User.class); System.out.println(packageName);</pre><p>5.3 判断某个类是否内部类</p><p>如果你想判断某个类是否内部类,可以使用ClassUtils的isInnerClass方法。例如:</p><pre class="brush:java;toolbar:false">System.out.println(ClassUtils.isInnerClass(User.class));</pre><p>5.4 判断对象是否代理对象</p><p>如果你想判断对象是否代理对象,可以使用ClassUtils的isCglibProxy方法。例如:</p><pre class="brush:java;toolbar:false">System.out.println(ClassUtils.isCglibProxy(newUser()));</pre><p>ClassUtils还有很多有用的方法,等待着你去发掘。感兴趣的朋友,可以看看下面内容:<img src="/u/cms/www/202402/903400290984.png"/></p><p>6 BeanUtils</p><p>Spring给我们提供了一个JavaBean的工具类,它在org.springframework.beans包下面,它的名字叫做:BeanUtils。</p><p>让我们一起看看这个工具可以带给我们哪些惊喜。</p><p>6.1 拷贝对象的属性</p><p>曾几何时,你有没有这样的需求:把某个对象中的所有属性,都拷贝到另外一个对象中。这时就能使用BeanUtils的copyProperties方法。例如:</p><pre class="brush:java;toolbar:false">Useruser1=newUser(); user1.setId(1L); user1.setName("苏三说技术"); user1.setAddress("成都"); Useruser2=newUser(); BeanUtils.copyProperties(user1,user2); System.out.println(user2);</pre><p>6.2 实例化某个类</p><p>如果你想通过反射实例化一个类的对象,可以使用BeanUtils的instantiateClass方法。例如:</p><pre class="brush:java;toolbar:false">Useruser=BeanUtils.instantiateClass(User.class); System.out.println(user);</pre><p>6.3 获取指定类的指定方法</p><p>如果你想获取某个类的指定方法,可以使用BeanUtils的findDeclaredMethod方法。例如:</p><pre class="brush:java;toolbar:false">MethoddeclaredMethod=BeanUtils.findDeclaredMethod(User.class,"getId"); System.out.println(declaredMethod.getName());</pre><p>6.4 获取指定方法的参数</p><p>如果你想获取某个方法的参数,可以使用BeanUtils的findPropertyForMethod方法。例如:</p><pre class="brush:java;toolbar:false">MethoddeclaredMethod=BeanUtils.findDeclaredMethod(User.class,"getId"); PropertyDeorpropertyForMethod=BeanUtils.findPropertyForMethod(declaredMethod); System.out.println(propertyForMethod.getName());</pre><p>如果你对BeanUtils比较感兴趣,可以看看下面内容:<img src="/u/cms/www/202402/507858048259.png"/></p><p>7 ReflectionUtils</p><p>有时候,我们需要在项目中使用反射功能,如果使用最原始的方法来开发,代码量会非常多,而且很麻烦,它需要处理一大堆异常以及访问权限等问题。</p><p>好消息是Spring给我们提供了一个ReflectionUtils工具,它在org.springframework.util包下面。</p><p>7.1 获取方法</p><p>如果你想获取某个类的某个方法,可以使用ReflectionUtils类的findMethod方法。例如:</p><pre class="brush:java;toolbar:false">Methodmethod=ReflectionUtils.findMethod(User.class,"getId");</pre><p>7.2 获取字段</p><p>如果你想获取某个类的某个字段,可以使用ReflectionUtils类的findField方法。例如:</p><pre class="brush:java;toolbar:false">Fieldfield=ReflectionUtils.findField(User.class,"id");</pre><p>7.3 执行方法</p><p>如果你想通过反射调用某个方法,传递参数,可以使用ReflectionUtils类的invokeMethod方法。例如:</p><pre class="brush:java;toolbar:false">ReflectionUtils.invokeMethod(method,springContextsUtil.getBean(beanName),param);</pre><p>7.4 判断字段是否常量</p><p>如果你想判断某个字段是否常量,可以使用ReflectionUtils类的isPublicStaticFinal方法。例如:</p><pre class="brush:java;toolbar:false">Fieldfield=ReflectionUtils.findField(User.class,"id"); System.out.println(ReflectionUtils.isPublicStaticFinal(field));</pre><p>7.5 判断是否equals方法</p><p>如果你想判断某个方法是否equals方法,可以使用ReflectionUtils类的isEqualsMethod方法。例如:</p><pre class="brush:java;toolbar:false">Methodmethod=ReflectionUtils.findMethod(User.class,"getId"); System.out.println(ReflectionUtils.isEqualsMethod(method));</pre><p>当然这个类还有不少有趣的方法,感兴趣的朋友,可以看看下面内容:<img src="/u/cms/www/202402/199190985726.png"/></p><p>8 Base64Utils</p><p>有时候,为了安全考虑,需要将参数只用base64编码。</p><p>这时就能直接使用org.springframework.util包下的Base64Utils工具类。</p><p>它里面包含:encode和decode方法,用于对数据进行编码和解码。</p><p>例如:</p><pre class="brush:java;toolbar:false">Stringstr="abc"; Stringencode=newString(Base64Utils.encode(str.getBytes())); System.out.println("编码后:"+encode); try{ Stringdecode=newString(Base64Utils.decode(encode.getBytes()),"utf8"); System.out.println("解码:"+decode); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); }</pre><p>执行结果:</p><pre class="brush:java;toolbar:false">编码后:YWJj 解码后:abc</pre><p>9 SerializationUtils</p><p>有时候,我们需要把数据进行序列化和反序列化处理。</p><p>传统的做法是某个类实现Serializable接口,然后重新它的writeObject和readObject方法。</p><p>但如果使用org.springframework.util包下的SerializationUtils工具类,能更轻松实现序列化和反序列化功能。</p><p>例如:</p><pre class="brush:java;toolbar:false">Map<String,String>map=Maps.newHashMap(); map.put("a","1"); map.put("b","2"); map.put("c","3"); byte[]serialize=SerializationUtils.serialize(map); Objectdeserialize=SerializationUtils.deserialize(serialize); System.out.println(deserialize);</pre><p>10 HttpStatus</p><p>很多时候,我们会在代码中定义http的返回码,比如:接口正常返回200,异常返回500,接口找不到返回404,接口不可用返回502等。</p><pre class="brush:java;toolbar:false">privateintSUCCESS_CODE=200; privateintERROR_CODE=500; privateintNOT_FOUND_CODE=404;</pre><p>其实org.springframework.http包下的HttpStatus枚举,或者org.apache.http包下的HttpStatus接口,已经把常用的http返回码给我们定义好了,直接拿来用就可以了,真的不用再重复定义了。<img src="/u/cms/www/202402/159785731317.png"/></p><p>11 HtmlUtils</p><p>有时候,用户输入的内容中包含了一些特殊的标签,比如<,如果不错处理程序可能会报错。</p><p>而且为了安全性,对用户输入的特色字符,也需要做转义,防止一些SQL注入,或者XSS攻击等。</p><p>其实Spring给我们提供了一个专门处理html的工具:HtmlUtils,我们可以直接用它来做转义,使用起来非常方便。</p><p>例如:</p><pre class="brush:java;toolbar:false">@Test publicvoidtestHtml(){ StringspecialStr="<divid=\"testDiv\">test1;test2</div>"; Stringstr1=HtmlUtils.htmlEscape(specialStr); System.out.println(str1); }</pre><p><br/></p>

    关注"都市百货" 了解南陵

    微信咨询wanglf2r(不拉群 发广告者勿加)

    0
    0
    上一篇:清除win10a.com转其他网址劫持或2345浏览地址 上一篇:SpringBoot 事物

    评论已有0

    提交评论

    热门评论

    南陵新闻
    公示公告
    常用查询
    风光南陵
    走出南陵
    友情链接