前端传入的参数实体中,有时候会出现传入了一空格,导致操作失败,这时就可以利用java反射机制去除实体中类型为sting的属性值中的空格。  

  java代码示例:

 package com.spyang.util;

 import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.Lists; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List; /**
* 功能描述: 将类中的类型为'String'的属性值中的空格去掉
*
* @author shuangping.yang
* @version 1.0
* @ClassName BeanUtil
* @date 2020-9-10
*/
@Slf4j
public class TrimBeanUtil { private static final String JAVA_TYPE = "java.lang.String";
private static final String GET = "get";
private static final String SET = "set"; /**
* 循环去除每个字段的空格
*
* @param bean 实体
*/
public static void beanAttributeValueTrim(Object bean) {
if (bean != null) {
//获取所有的字段包括public,private,protected,private
List<Field> fieldList = Lists.newArrayList(bean.getClass().getDeclaredFields());
fieldList.stream().forEach(field -> {
//判断每个字段是否是sting类型,只有是string类型时才能去除前后空格
if (JAVA_TYPE.equals(field.getType().getName())) {
//获取每个字段的字段名
String fieldName = field.getName();
try {
//利用java反射机制获取对应字段的值
Object value = getFieldValue(bean, fieldName);
if (null != value) {
// 同样利用java 反射机制将修改后的值进行赋值
setFieldValue(bean, fieldName, value.toString());
}
} catch (Exception e) {
log.error("field conversion error ===>name{},msg{}", fieldName, e);
}
}
});
}
} /**
* 利用反射通过get方法获取bean中字段fieldName的值
*
* @param bean 实体
* @param fieldName 字段
* @return object 对应值
* @throws Exception
*/
private static Object getFieldValue(Object bean, String fieldName) throws Exception {
Method method;
// 获取对应字段的get方法名称,首字母改为大写: getName
StringBuffer methodName = new StringBuffer();
methodName.append(GET).append(fieldName.substring(0, 1).toUpperCase())
.append(fieldName.substring(1));
//获取对应的方法
method = bean.getClass().getMethod(methodName.toString(), new Class[0]);
return method.invoke(bean);
} /**
* 利用发射调用bean.set方法将value设置到字段
*
* @param bean 实体
* @param fieldName 字段
* @param fieldValue 赋值
* @throws Exception
*/
private static void setFieldValue(Object bean, String fieldName, String fieldValue) throws Exception {
Class[] classArr = new Class[1];
StringBuffer methodName = new StringBuffer();
// 获取对应字段的set方法名称,首字母改为大写:setName
methodName.append(SET).append(fieldName.substring(0, 1).toUpperCase())
.append(fieldName.substring(1));
//利用发射调用bean.set方法将value设置到字段
classArr[0] = JAVA_TYPE.getClass();
Method method = bean.getClass().getMethod(methodName.toString(), classArr);
method.invoke(bean, fieldValue.trim());
}
} 

package com.spyang.entiy;

/**
* @author shuangping.yang
* @version 1.0
* @ClassName Demo
* @date 2020.09.10 上午 11:37
*/
public class Demo {
private String name;
private String gender;
private Integer age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "Demo{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';
}
}

实体类

   public static void main(String[] args) {
Demo demo = new Demo();
demo.setName(" shuangping.yang\t ");
demo.setGender(" 男 ");
demo.setAge(20);
beanAttributeValueTrim(demo);
System.out.println("实体:" + demo.toString());
}

例子

以上是本文的全部内容,希望对大家的学习有所帮助,也希望能得到大家支持。

JAVA 去除实体中类型为string的属性值中的空格的更多相关文章

  1. 使用innerHTML获取HTML代码时,HTML标记属性的双引号好多都消失不见了,原来是属性值中包含空格才会保留双引号

    最近搞的一个项目中所使用的方式比较奇怪,用Label显示HTML内容,然后不断地使用JS把Label的innerHTML复制到TextBox中. 但是,昨天发现了一个问题,获取元素值的时候,有时候正常 ...

  2. js sort方法根据数组中对象的某一个属性值进行排序(实用方法)

    js sort方法根据数组中对象的某一个属性值进行排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {nam ...

  3. C# 反射获取属性值、名称、类型以及集合的属性值、类型名称

    实体类 class Product { public string Id { get; set; } public string Name { get; set; } public List<P ...

  4. java正则表达式获取指定HTML标签的指定属性值

    package com.mmq.regex; import java.util.ArrayList; import java.util.List; import java.util.regex.Mat ...

  5. js中attr 与find 获取属性值,

    一.attr的用法 1. attr(属性名)        //获取属性的值(取得第一个匹配元素的属性值.通过这个方法可以方便地从第一个匹配元素中获取一个属性的值.如果元素没有相应属性,则返回 und ...

  6. android中GridView关于间距的属性值介绍

    android:columnWidth  设置列的宽度.关联的方法为:setColumnWidth(int)  stretchMode属性值的作用是设置GridView中的条目以什么缩放模式去填充空间 ...

  7. js sort方法根据数组中对象的某一个属性值进行排序

    sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {name:'zopp',age:0}, {name:'gpp' ...

  8. jquery中选择块并改变属性值的方法

    本文为大家介绍下使用jquery改变class属性的值,通过removeClass.addClass实现,具体如下,感兴趣的朋友可以学习下jquery改变class属性的值 $("#top_ ...

  9. href标签中target的几个属性值

    没有指定<a>的target属性值时,默认是"_blank,可以参考以下代码的设置来控制<a href="#" target="_blank& ...

随机推荐

  1. Tutte 定理与 Tutte–Berge 公式

    Tutte theorem 图 \(G=(V,E)\) 有完美匹配当且仅当满足 \(\forall U\subseteq V,o(G-U)\le|U|,o(X)\) 表示 X 子图的奇连通块数. Tu ...

  2. Flutter 容器Container类和布局Layout类

    1.布局和容器 [布局]是把[容器]按照不同的方式排列起来. Scaffold包含的主要部门:appBar,body,bottomNavigator 其中body可以是一个布局组件,也可以是一个容器组 ...

  3. 存储系列之 VFS虚拟文件系统简介

    引言:文件系统发展到一定阶段,开始进一步抽象和分层.   前面我们介绍了ext系列文件系统和xfs文件系统,这些是Linux使用最多的文件系统,也是很多发布版本默认选择的文件系统.而事实上,Linux ...

  4. CompletableFuture异步线程

    1.线程池七大参数介绍 (1)corePoolSize:线程池中常驻核心线程数 (2)maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值必须大于等于1 (3)keepAliveT ...

  5. 收集整理element-ui 表格组件的常用操作方法

    一.简单的表格行内编辑效果 原理是通过Css控制绑定的输入控件与显示值,在选中行样式下对控件进行隐藏或显示. 1.注意下样式的设置 2.change事件 @change="handleEdi ...

  6. ElasticSearch实战系列八: Filebeat快速入门和使用---图文详解

    前言 本文主要介绍的是ELK日志系统中的Filebeat快速入门教程. ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

  7. go genetlink demo

    原文链接:https://github.com/mdlayher/genetlink [root@wangjq test]# cat genetlink.go package main import ...

  8. instanceof判断问题

    有时候我们根据instanceof来判断对象的数据类型 但是 用instanceof判断基本数据类型时 会不靠谱 例如 let str = '123' let str1 = new String(&q ...

  9. Java GUI 图书管理系统

    01 概述 一款功能强大的图书馆管理系统,功能齐全,小白/大学生项目实训,学习的不二之选. 02 技术 此系统使用 java awt 实现.java.awt是一个软件包,包含用于创建用户界面和绘制图形 ...

  10. 数据中台实战(一):以B2B电商亿订为例,谈谈产品经理视角下的数据埋点

    本文以B2B电商产品“亿订”为实例,与大家一同谈谈数据中台的数据埋点. 笔者所在公司为富力环球商品贸易港,是富力集团旗下汇聚原创设计师品牌及时尚买手/采购商两大社群,通过亿订B2B电商.RFSHOWR ...