失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java通过反射获取对象的指定属性值(包括私有属性值和指定注解属性值)

java通过反射获取对象的指定属性值(包括私有属性值和指定注解属性值)

时间:2021-02-27 10:38:21

相关推荐

java通过反射获取对象的指定属性值(包括私有属性值和指定注解属性值)

通过反射机制,可以灵活地根据对象的属性名的字符串形式获取对象的属性值。当一个对象有多个属性的时候,只需要对其中的几个特定属性进行某种特殊处理,具体是哪个属性并不能提前确定,每个需要处理的属性的方法也不相同,此时就可以通过配置的方式进行实现。比如针对每个属性,指定一个处理方式。

类定义,这里以SysUser类为例:

import com.fasterxml.jackson.annotation.JsonProperty;public class SysUser {// @JsonProperty("roleIdList")private Long[] roleIds;}public Long[] getRoleIds(){return roleIds;}public void setRoleIds(Long[] roleIds){this.roleIds = roleIds;}

以下是采用反射方式,根据属性名获取对象的属性值的代码段:

import com.fasterxml.jackson.annotation.JsonProperty;public static Object getFieldValueByObject(Object object, String targetFieldName) throws Exception {// 获取该对象的ClassClass objClass = object.getClass();// 初始化返回值Object result = null;// 获取所有的属性数组Field[] fields = objClass.getDeclaredFields();for (Field field : fields) {// 属性名称String currentFieldName = "";// 获取属性上面的注解 import com.fasterxml.jackson.annotation.JsonProperty;/*** 举例: @JsonProperty("roleIds") * private String roleIds;*/try {boolean has_JsonProperty = field.isAnnotationPresent(JsonProperty.class);if (has_JsonProperty) {currentFieldName = field.getAnnotation(JsonProperty.class).value();} else {currentFieldName = field.getName();}if (currentFieldName.equals(targetFieldName)) {field.setAccessible(true);result = field.get(object);return result; // 通过反射拿到该属性在此对象中的值(也可能是个对象)}} catch (SecurityException e) {// 安全性异常e.printStackTrace();} catch (IllegalArgumentException e) {// 非法参数e.printStackTrace();} catch (IllegalAccessException e) {// 无访问权限e.printStackTrace();}}return result;}

特别说明:

1. 如果是私有属性,需要设置属性的可访问性,不设置的话,会抛出异常。

field.setAccessible(true);

2. 属性名如果定义不规范,可以通过Json属性注解进行重命名,要求在类定义的对应属性上添加注解,添加注解以后,优先根据注解名称获取属性的值。

@JsonProperty("roleIdList")private Long[] roleIds;

如果觉得《java通过反射获取对象的指定属性值(包括私有属性值和指定注解属性值)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。