java 整个类 所有字段 trim() 去空 工具类

有时候吧,拿到前端的表单数据,由于用户的操作,存在前后空格啥的,就经常需要对一个类里面的所有字段的所有属性的值进行trim()化,当一个类有个20 30字段属性的时候,无脑重复操作,很是不爽。
今天花了半个早上了解了java类的反射机制,利用反射机制写了一个工具类。主要是网上找不到啊。。。那只能自己造轮子了。转发的话备注下出处链接谢谢。

来上正文了:


```java
package com.hikvision.ldadoss.utils;


import com.hikvision.ldadoss.dto.UserDto;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class StringCUtil {
    // 整个类的所有string类型字段去空值,trim() 去空
    public static Object removeSpaces(Object object) {
        Class<?> clazz = object.getClass();
//        获取到所有的属性值
        Field[] fields = clazz.getDeclaredFields();
        Method setMethod = null;
        Method getMethod = null;

        Object obj1 = null;
        for (int i = 0; i < fields.length; i++) {

                    //判断属性是否为字符类型
            if (fields[i].getGenericType().toString().equals("class java.lang.String")) {
                try {
                    //获取到当前字段名称,并首字母大写
                    String itemName =titleCase(fields[i].getName());
                    //根据属性名获取到方法名,再根据方法名获取到方法
                    getMethod = clazz.getMethod("get" +itemName);
                    setMethod = clazz.getMethod("set" +itemName, String.class);
                    //执行获取到的方法,并传入参数,获取到当前字段对应的属性值
                    String val = (String) getMethod.invoke(object);// 调用getter方法获取属性值
                    //执行set类型方法,为当前字段赋值为.trim()后的新值
                    obj1 = setMethod.invoke(object, val.trim());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return object;

    }

    //首字母大写
    public static String titleCase(String s) {
        char[] c = s.toCharArray();
        if ((c[0] >= 'a') && (c[0] <= 'z')) {
            c[0] -= 32;
        }
        return new String(c);
    }


    public static void main(String args[]) {
        //随便一个自定义的类,就是前端拿到的表单。。。
        UserDto userDto = UserDto.builder().name(" 测试 ").address(" 世界 中国 ").email("     2125@qq.com").build();
        System.out.println(userDto.toString());
        removeSpaces(userDto);
        System.out.println(userDto.toString());


    }

}



测试的话,可以导入下面的实体类后,直接调用工具类内的main()方法进行测试。

//表单接收类
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserDto {
    String name;
    String address;
    String email;


}

备注:
UserDto 是前端拿到的表单接收的类,自行更换。


附上测试结果
调用测试确实符合想要的效果了

文末:

感谢 评论区老哥 取个破名真费劲 指点出错误。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值