业务场景,检查传入的数据是否存在空格数据 并且进行去除, 针对指定的属性 只去除前后空格;
话不多说 直接上代码;
引入
hutool工具类
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.15</version>
</dependency>
准备注解
(排除全部去除空格,只去除前后空格)
package com.common.annotation;
import java.lang.annotation.*;
/**
* 忽略清除空字符串
* @author oi77
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface ExcludeMiddleTrim {
}
工具类
忽略去除空格和换行工具类(也可以用切片的方式去做,这里我就只用工具类手动调用的方式去写了)
package com.common.utils;
import cn.hutool.core.util.ReflectUtil;
import com.jiangshen.tms.netfreight.common.annotation.ExcludeMiddleTrim;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
/**
* 去除对象属性数据中空格及换行
*/
public class TrimBeanUtil {
private static final String STRING_TYPE_NAME = "java.lang.String";
/**
* 去除实体中属性值空格及换行
* 如果需要忽略去除所有空格 只去除前后空格 请在属性上添加 @ExcludeTrim 注解
* @param object 实体属性
*/
public static void trimData(Object object) {
// 获取实体中所有属性字段
Field[] fields = ReflectUtil.getFields(object.getClass());
for (Field field : fields) {
// 获取属性字段类型
String canonicalName = field.getType().getCanonicalName();
// 如果字段是String类型,则去除此字段数据的空格
if (STRING_TYPE_NAME.equals(canonicalName)) {
// 获取字段值
String fieldValue = (String) ReflectUtil.getFieldValue(object, field);
if (StringUtils.isNotBlank(fieldValue)) {
// 去掉换行
String fieldValueStr = fieldValue.replaceAll("\r|\n", "");
ExcludeMiddleTrim middleTrim = field.getAnnotation(ExcludeMiddleTrim.class);
if (middleTrim != null) {
//去除前后空格
fieldValueStr = fieldValueStr.trim();
}else{
// 去除所有
fieldValueStr = fieldValueStr.replaceAll("\\s*", "");
}
// 将去除空格后的数据 替换 原数据
ReflectUtil.setFieldValue(object, field, fieldValueStr);
}
}
}
}
}
实体添加注解
如果需要忽略中间空格则在属性上加上注解即可;
调用即可
TrimBeanUtil.trimData(对象);