去除前端参数中字符串前后空格-基础方式

1. 说明

去除目标对象中字符串的前后空格,以及目标对象内集合属性的前后空格

2.示例

2.1 直接看效果


    public static void main(String[] args) {
        Province province = new Province();
        // 目前对象属性前后空格
        province.setProvinceName("      你在哪a  ");

        //  目前对象集合属性前后空格
        List<City> cityList = new ArrayList<>();
        City city = new City();
        city.setCityName("     我在这呢 ");

        cityList.add(city);
        province.setCityList(cityList);

        try {
            System.out.println("处理前===> provinceName:"+province.getProvinceName() );
            System.out.println("处理前===> cityName:"+province.getCityList().get(0).getCityName() );
            System.out.println("【开始处理】");
            TUtils.trimBeanString(province);

            System.out.println("处理后===> provinceName:"+province.getProvinceName() );
            System.out.println("处理后===> cityName:"+province.getCityList().get(0).getCityName() );

        } catch (Exception e) {
            e.printStackTrace();
        }


    }

2.2 结果如下:

实验类如下(只展示重要信息)


public class Province {

    private String provinceName;

    private List<City> cityList;
}



public class City {
    private String cityName;
}

主要实现方法:

TUtils.trimBeanString(Object object);

3. 工具类如下:


import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description: Bean 前后空格处理
 * @Date: 2022/6/22 16:33
 * @Author: luch
 * @Version: 1.0
 **/
public class TUtils {
    /**
     * 去掉bean中所有属性为字符串的前后空格
     *
     * @param bean
     * @throws Exception
     */
    public static void trimBeanString(Object bean) throws Exception {
        if (bean != null) {
            //获取所有的字段包括public,private,protected,private
            Field[] fields = bean.getClass().getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                Field f = fields[i];
                // 对其中的集合同样进行空格处理
                if (f.getType().getName().equals("java.util.List")) {
                    List<Object> objects = objCastList(getFieldValue(bean, f.getName()), Object.class);
                    for (Object object : objects) {
                        trimBeanString(object);
                    }
                }
                if (f.getType().getName().equals("java.lang.String")) {
                    String key = f.getName();
                    //获取字段名
                    Object value = getFieldValue(bean, key);

                    if (value == null){
                        continue;
                    }

                    setFieldValue(bean, key, value.toString().trim());
                }
            }
        }
    }

    /**
     * 利用反射通过get方法获取bean中字段fieldName的值
     *
     * @param bean
     * @param fieldName
     * @return
     * @throws Exception
     */
    private static Object getFieldValue(Object bean, String fieldName)
            throws Exception {
        StringBuffer result = new StringBuffer();
        String methodName = result.append("get")
                .append(fieldName.substring(0, 1).toUpperCase())
                .append(fieldName.substring(1)).toString();

        Object rObject = null;
        Method method = null;

        @SuppressWarnings("rawtypes")
        Class[] classArr = new Class[0];
        method = bean.getClass().getMethod(methodName, classArr);
        rObject = method.invoke(bean, new Object[0]);

        return rObject;
    }

    /**
     * 利用发射调用bean.set方法将value设置到字段
     *
     * @param bean
     * @param fieldName
     * @param value
     * @throws Exception
     */
    private static void setFieldValue(Object bean, String fieldName, Object value)
            throws Exception {
        StringBuffer result = new StringBuffer();
        String methodName = result.append("set")
                .append(fieldName.substring(0, 1).toUpperCase())
                .append(fieldName.substring(1)).toString();

        //利用反射调用bean.set方法将value设置到字段
        @SuppressWarnings("rawtypes")
        Class[] classArr = new Class[1];
        classArr[0] = "java.lang.String".getClass();
        Method method = bean.getClass().getMethod(methodName, classArr);
        method.invoke(bean, value);
    }

    /**
     * 集合
     * @param obj
     * @param clazz
     * @param <R>
     * @return
     */
    private static <R> List<R>objCastList(Object obj, Class<R> clazz){
        List<R> list =new ArrayList<>();
        if(obj instanceof List<?>){
            for(Object o :(List<?>)obj){
                list.add(clazz.cast(o));
            }
        }
        return list;
    }
}

4. AOP拦截方式(注解)

去除前端参数字符串前后空格-注解方式


版权声明:本文为luChenH原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。