开发中遇到一些特殊字段不能有空格的要求,后端需要对其进行处理,百度实践之后,奉上一个工具类,可以完美去掉参数中的空格。
原理就是利用反射机制,获取属性值并重新设置去空格之后的属性值
BeanHelper
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class BeanHelper {
/**
* 去掉bean中所有属性为字符串的前后空格
*
* @param bean
* @throws Exception
*/
public static void beanAttributeValueTrim(Object bean){
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.lang.String")) {
String key = f.getName();
//获取字段名
Object value = null;
try {
value = getFieldValue(bean, key);
} catch (Exception e) {
throw new MixException(BusinessErrorEnum.BASE_SERVER_UNKNOWN);
}
if (value == null) {
continue;
}
try {
setFieldValue(bean, key, value.toString().trim());
} catch (Exception e) {
throw new MixException(BusinessErrorEnum.BASE_SERVER_UNKNOWN);
}
}
}
}
}
/**
* 利用反射通过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设置到字段
Class[] classArr = new Class[1];
classArr[0] = "java.lang.String".getClass();
Method method = bean.getClass().getMethod(methodName, classArr);
method.invoke(bean, value);
}
}
使用方法: 接收到参数后,直接调用改工具类中的方法即可
如:
@Override
public Result addArea(InsertAreaBo areaInsert) {// 接收参数
BeanHelper.beanAttributeValueTrim(areaInsert);// 去空格
return Result.hasModified(areaService.save(areaInsert));
}